char数组之间的交换

时间:2011-10-06 21:15:25

标签: 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 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;
}

2 个答案:

答案 0 :(得分:1)

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

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

switchNames(a, b);

不要忽略编译器警告。并获得Harbison和Steele的 C:A Reference Manual 的副本。

答案 1 :(得分:1)

您好。您应该在方法中为堆上的(使用new)分配2个新目标字符串(char *),然后执行字符串复制,删除等。如果您使用const char *进行编程,则使用异常处理可能有意义在你的主()。在堆上工作时,字符串化运算符可能会有所帮助..: - )

// Preprocessor string constants
#define TEXT1 Hello 12345