我必须在C中使用char []并且我想在它们之间交换,只需将指针交换到数组而不是一次只有一个char,所以我编写了这段代码:
#include <stdio.h>
void fastSwap (char **i, char **d)
{
char *t = *d;
*d = *i;
*i = t;
}
int main ()
{
char num1[] = "012345678910";
char num2[] = "abcdefghujk";
fastSwap ((char**)&num1,(char**)&num2);
printf ("%s\n",num1);
printf ("%s\n",num2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到这个输出(注意最后4个字符)
abcdefgh8910 01234567ujk
当我期待:
abcdefghujk 012345678910
注意:我正在使用64位Linux系统.
Mar*_*iot 12
您不能修改的地址num1和num2,你的代码应该工作,如果你的测试是不是:
int main ()
{
char num1[] = "012345678910";
char num2[] = "abcdefghujk";
char *test1 = num1;
char *test2 = num2;
fastSwap (&test1,&test2);
printf ("%s\n",test1);
printf ("%s\n",test2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
数组不是指针.当你调用它们时它们会衰减到指针fastSwap(),这些指针不是实际的数组.你需要演员表的事实应该给你一个错误的暗示.
这可行:
void fastSwap (const char **i, const char **d)
{
const char *t = *d;
*d = *i;
*i = t;
}
const char* num1 = "012345678910";
const char* num2 = "abcdefghujk";
fastSwap (&num1,&num2);
printf ("%s\n",num1);
printf ("%s\n",num2);
Run Code Online (Sandbox Code Playgroud)
这将有效:
int main ()
{
char *num1 = "012345678910";
char *num2 = "abcdefghujk";
fastSwap (&num1,&num2);
printf ("%s\n",num1);
printf ("%s\n",num2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)