开辟一个缓冲区,比如
而你的而为数组为
char **argv
其中argv[0] = "this is the first string"
argv[1] = "this is the seconde string"
你只须调用如下
strcpy(buff,argv[0])
strcpy(argv[0],argv[1])
strcpy(argv[1],buff)
一下是完整代码,并测试过
#include <stdio.h>
#include <string.h>
char argv[2][100]={ "This is the first string","This is the second string"}
// 存储字符串的二维数组,每个字符串最长为99个字节
char buff[100]
//缓冲区
int main()
{
printf("转换前:\n")
printf("argv[0] = %s\n",argv[0])
printf("argv[1] = %s\n",argv[1])
strcpy(buff,argv[0])
strcpy(argv[0],argv[1])
strcpy(argv[1],buff)
printf("转换后:\n")
printf("argv[0] = %s\n",argv[0])
printf("argv[1] = %s\n",argv[1])
return 0
}
char str[20]={0}char (*p)[20]=&a[0]
str=a[0] //将a[0]处的值保存下来,以免交换时a[0]处的值丢失.
*p[0]=a[1]
*p[1]=str
不知行不行 ,你自己去试一下.
有如下两种方法:
一、循环按每个元素交换。
以下程序完成二维数组第0行和第1行的交换。
#include <stdio.h>int main()
{
int a[2][2] = {1,2,3,4}
int v
int i,j
for(i = 0 i < 2 i ++)
{
//以下三行是对i位置的第0行和第1行数据进行交换。
v = a[0][i]
a[0][i] = a[1][i]
a[1][i] = v
}
//输出交换后的结果
for(i = 0 i < 2 i ++)
{
for(j = 0 j < 2 j ++)
printf("%d ", a[i][j])
printf("\n")
}
}
二、通过memcpy函数进行整体数据交换。
memcpy函数声明在string.h中,其声明为:
void *memcpy (void *dest, const void *src,size_t n)
功能是把src位置上,长度为n字节的数据,复制到dest位置上。
使用这个函数,需要一个长度为一行数据所占空间的临时空间。
使用memcpy功能同上一个例子的代码如下:
#include <stdio.h>#include <string.h>
int main()
{
int a[2][2] = {1,2,3,4}
int t[2]//临时空间。
int i,j
memcpy(t,a[0], sizeof(a[0]))//将第0行的数据放到临时空间。
memcpy(a[0], a[1], sizeof(a[0]))//将第1行数据放到第0行中。
memcpy(a[1], t, sizeof(a[0])) //将保存到t中的数据,即原本的第0行数据,放到第1行中。
//输出交换后的结果
for(i = 0 i < 2 i ++)
{
for(j = 0 j < 2 j ++)
printf("%d ", a[i][j])
printf("\n")
}
}
以上两个程序达到同样的效果,输出为:
3 4
1 2