0

函数是反转一个 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时,这条线导致总线错误,谁能解释一下原因?

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

4

2 回答 2

3
while (&str > &end) {

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

while (str < end) {

或者

while (start < end) {

str并酌情更改to的其他实例start...或摆脱未使用的start变量。

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

前者不合法 C.

更新:

新发布的代码看起来不错,但如果参数无效或不可写,则其行为未定义......例如,字符串文字。完整的答案要求您发布一个 简短的、自包含的、可编译的示例

于 2013-05-17T21:35:02.827 回答
3

这个循环条件:

while (&str > &end)

是错的。你不想要&运营商,你也有它倒退。利用:

while (str < end)

除此之外,正如我在上面的评论中提到的,您还需要正确声明您的函数签名:

void reverse(char str[])
于 2013-05-17T21:27:32.950 回答