C char []交换问题

时间:2011-09-23 12:17:43

标签: c char swap

我有这个简短的代码:

#include <stdio.h>
void fastSwap (char **i, char **d)
{
    char *t = *d;
    *d = *i;
    *i = t;
}
int main ()
{
    char num1[] = "hello";
    char num2[] = "class";
    fastSwap ((char**)&num1,(char**)&num2);
    printf ("%s\n",num1);
    printf ("%s\n",num2);
    return 0;
}

这个简短程序的输出是:

claso
hells

我只是不明白为什么交换每个char []的最后一个字母。 有什么想法吗?

3 个答案:

答案 0 :(得分:5)

fastSwap ((char**)&num1,(char**)&num2);

这是未定义的行为。您不能将指向char数组的指针强制转换为指向char的指针。你需要的是:

const char* num1 = "hello";
const char* num2 = "class";
fastSwap (&num1,&num2);

此外,您需要更改fastSwap的声明并将内层const添加到参数

void fastSwap (const char **i, const char **d)

答案 1 :(得分:2)

我假设您只是通过操作指针来尝试交换num1num2数组的内容,以便在调用fastswap之后num1的内容为"class"num2的内容为"hello"

如果是这种情况,那么由于多种原因这不起作用。尽管数组表达式经常转换为指针类型,但数组不是指针。其次,您无法修改数组表达式的值。

如果你想将num1num2作为数组(而不是指向字符串文字的指针)并且能够交换它们的内容,你需要更多的东西:< / p>

void fastswap(char *i, char *d)
{
  while (*i && *d)
  {
    char t = *i;
    *d++ = *i;
    *i++ = t;
  }
}

将被称为

fastswap(num1, num2);

答案 2 :(得分:0)

您正在指向指向字符的指针。您可能只想将指针传递给这样的字符:

#include <stdio.h>
void fastSwap (char *i, char *d)
{
    char t = *d;
    *d = *i;
    *i = t;
}
int main ()
{
    char num1[] = "hello";
    char num2[] = "class";
    fastSwap (num1,num2);
    printf ("%s\n",num1);
    printf ("%s\n",num2);
    return 0;
}

这会交换2个char数组的第一个字符。