该函数用于反转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 []?答案 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