void main() {
void strrev(char *);
char *p="GOOd";
strrev(p);
printf("%s",p);
}
void strrev(char *str) {
char temp, *end_ptr;
if( str == NULL || !(*str) ) return;
end_ptr = str + strlen(str) - 1;
while( end_ptr > str )
{
temp = *str;
*str = *end_ptr;
*end_ptr = temp; str++;
end_ptr--;
}
}
我收到错误分段失败,任何人都可以帮我解决问题...
答案 0 :(得分:8)
声明:
char *p = "GOOd";
定义一个字符串文字“GOOD”,由指针p
指向。
您正尝试通过strrev
函数修改此字符串文字,从而导致未定义行为(UB)以及崩溃。
字符串文字的问题是它们存储在只读(实现定义的)内存位置,并且不允许用户程序更改它。如果程序试图这样做,则会导致UB。
因此,不应使用字符串文字。您应该使用数组。
您应该使用:
char p[] = "GOOd";
答案 1 :(得分:5)
以下是一个问题:
char *p = "GOOd";
允许编译器将字符串文字放在只读存储器中。
任何修改p
指向的字符串的尝试都会导致未定义的行为。
尝试将上述行更改为:
char p[] = "GOOd";
我认为strrev()
函数本身没有任何问题。