Arrays 字符数组之间的交换

Arrays 字符数组之间的交换,arrays,char,swap,Arrays,Char,Swap,我很难理解在8字节(64位)平台和4字节(32位)平台上运行上述代码之间的区别:在4字节平台上运行它不起作用-数组没有交换;在8字节上,它工作,但有警告 #include <stdio.h> void switchNames(char **a, char **b) { char* temp = *a; *a = *b; *b = temp; } int main () { char labc[10] = "labc"; char labcp

我很难理解在8字节(64位)平台和4字节(32位)平台上运行上述代码之间的区别:在4字节平台上运行它不起作用-数组没有交换;在8字节上,它工作,但有警告

#include <stdio.h>

void switchNames(char **a, char **b)
{
    char* temp = *a;
    *a = *b;
    *b = temp;
}

int main ()
{
    char labc[10] = "labc";
    char labcpp[10] = "labcpp";
    printf("Before switch: labc = %s, labcpp = %s\n", labc,    labcpp);
    switchNames(&labc, &labcpp);
    printf("After switch: labc = %s, labcpp = %s\n", labc,    labcpp);
    return 0;
}
#包括
无效开关名称(字符**a、字符**b)
{
char*temp=*a;
*a=*b;
*b=温度;
}
int main()
{
字符labc[10]=“labc”;
char labcpp[10]=“labcpp”;
printf(“切换前:labc=%s,labcpp=%s\n”,labc,labcpp);
开关名称(&labc和&labcpp);
printf(“切换后:labc=%s,labcpp=%s\n”,labc,labcpp);
返回0;
}

您是否阅读了警告?他们会告诉你问题的原因。代码的行为未定义
&labc
&labcpp
具有类型
char*const*
,(指向char的指针的常量),但您正在将它们传递给需要
char**
(指向char的指针)的函数。我很惊讶它在任何情况下都能工作。此代码应在没有警告的情况下编译并按预期工作:

char *labc = "labc";
char *labcpp = "labcpp";
char **a = &labc;
char **b = &labcpp;

switchNames(a, b);

不要忽略编译器警告。还有一份哈比森和斯蒂尔的C:a参考手册。

你好。您应该在方法中为堆上的目标字符串(使用new)分配2个新的目标字符串(char*),然后执行stringcopy、delete等操作。如果您使用main()中的const char*进行编程,那么使用异常处理可能是有意义的。在堆上工作时,字符串化操作符可能会有所帮助…:-)

// Preprocessor string constants
#define TEXT1 Hello 12345