我正在尝试学习 C 的基础知识,但我无法弄清楚为什么这段代码不起作用。 reverse() 中的 while 循环导致总线错误。我在一本编程面试书中发现了几乎相同的代码作为有效的解决方案,但无论是这种方法还是我在此处看到的其他类似方法都无法在没有总线错误的情况下为我工作。
#include <stdio.h>
void reverse(char* str) {
char* end = str;
char tmp = 0;
if(str) {
while(*end) {
end++;
}
--end;
while(end>str) {
tmp = *end;
*end-- = *str;
*str++ = tmp;
}
}
}
int main() {
char* a = "12";
puts(a);
reverse(a);
puts(a);
return 0;
}
最佳答案
问题是您正在尝试反转一个只读的常量文字字符串。将 main
中 a
的声明更改为 char a[] = "12";
以使其成为可写的 char 数组
关于c - C中的就地字符串反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4785967/