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--;
}
}
Run Code Online (Sandbox Code Playgroud)
我得到错误分割失败可以任何人帮助我如何解决它...
该声明:
char *p = "GOOd";
Run Code Online (Sandbox Code Playgroud)
定义由指针指向的字符串文字"GOOD" p.
您正在尝试通过strrev导致未定义行为(UB)和崩溃的函数修改此字符串文字.
字符串文字的问题是它们存储在只读(实现定义的)内存位置,并且不允许用户程序更改它.如果程序试图这样做,则会导致UB.
因此,不应使用字符串文字,而应使用数组.
你应该使用:
char p[] = "GOOd";
Run Code Online (Sandbox Code Playgroud)
一个问题是以下内容:
char *p = "GOOd";
Run Code Online (Sandbox Code Playgroud)
允许编译器将字符串文字放在只读内存中.
任何修改指向的字符串的尝试都会p导致未定义的行为.
尝试将以上行更改为:
char p[] = "GOOd";
Run Code Online (Sandbox Code Playgroud)
我没有看到strrev()函数本身有任何问题.