char值的赋值导致Bus错误

时间:2013-05-17 21:20:23

标签: c char

该函数用于反转C字符串:

void reverse(char[] str){

char *start = str;
char *end = str;
char tmp;

if (str) {

    while (*end) {
        end++;
    }

    end--;

    while (&str > &end) {

        tmp = *str;

        *str = *end;
        str++;
        *end=tmp;
        end--;
       }
    }

}

在最后一个while循环中,当我将* end指定给* str时,此行导致总线错误,有人可以解释原因吗?

顺便问一下,a之间有什么区别  char [] temp和char temp []?

2 个答案:

答案 0 :(得分:3)

此循环条件:

while (&str > &end)

错了。您不想要&运营商,而且您也需要向后运营。使用:

while (str < end)

除此之外,正如我在上面的评论中所提到的,你也需要正确地声明你的功能签名:

void reverse(char str[])

答案 1 :(得分:3)

while (&str > &end) {

这条线错了。 &安培;产生地址,这些指针变量的地址在循环期间不会改变。你不需要指针的地址,你想要它们的值,并且你想循环直到开始到达结束,所以:

while (str < end) {

或者

while (start < end) {

并根据需要将str的其他实例更改为start ...或者删除未使用的start变量。

  

顺便说一下,char [] temp和char temp []有什么区别?

前者不合法C.

更新

新发布的代码看起来没问题,但如果参数无效或不可写,则其行为未定义...例如,字符串文字。完整的答案要求您发布一个 Short, Self Contained, Compilable Example