我尝试使用Cracking the coding interview中的代码来运行反向字符串函数。我不知道代码是错还是我应该使用另一个IDE(我使用Xcode 5.2)。我是C编程新手所以请解释一下。感谢。
#include <stdio.h>
void reverse(char *str);
int main(int argc, const char * argv[])
{
char *str = "Hello, World!";
reverse(str);
printf("%s", str);
return 0;
}
void reverse(char *str){
char *end = str;
char tmp;
if (str) {
while (*end) {
++end;
}
--end;
while (str < end) {
tmp = *str;
*str++ = *end;
*end-- = tmp;
}
}
}
答案 0 :(得分:2)
这里的问题是你尝试修改字符串文字(str
指向那个),字符串文字是常量(即只读,不可修改)。
尝试修改某些常量是未定义的行为。未定义的行为可能有时似乎有效,但大多数情况下它会在运行时导致崩溃。
找到未定义行为(或其他可能不好的行为)的可能案例的好建议是启用更多警告。然后你应该得到一个关于将常量数组(所有字符串文字都是常量数组)赋值给非常量指针的警告。
答案 1 :(得分:0)
char *str = "Hello, World!";
制作
char str[] = "Hello World!";