C 把绳子倒过来,但它坏了

C 把绳子倒过来,但它坏了,c,C,我想反转字符串。但它不工作,代码崩溃。 *字符串无法更改?或者有什么问题?更改 #include <stdio.h> void reverse_string(char *string){ char *p = string; while(*p !='\0'){ p++; } p--; while( string < p ){ char temp; temp = *string; *string = *p; *p = temp; }

我想反转字符串。但它不工作,代码崩溃。 *字符串无法更改?或者有什么问题?

更改

#include <stdio.h>
void reverse_string(char *string){
char *p = string;
while(*p !='\0'){
    p++;
}
p--;

while( string < p ){
    char temp;
    temp = *string;
    *string = *p;
    *p = temp;
    }
}
int main(){
    char *string = "abcdefg";
    reverse_string(string);
    printf("%s\n",*string);
}

看看

%s格式用于字符串,但此处:

char string[] = "abcdefg";
您正在传递一个int,更改为:

printf("%s\n",*string);
这是一个无限循环:

printf("%s\n", string);

您需要在某个地方减小p。

您是否可以详细说明为什么会这样?OP的代码崩溃是因为他试图篡改一个常量对象的内存abcdefg的类型为const char*,它指向二进制文件的.text部分,因此操作系统/加载器将加载为写保护。@user268396,当然,我正在编辑:P*字符串不能更改。逻辑不好。你还忘了更新while循环中的指针,它永远不会停止循环。有人介意解释为什么这个问题如此糟糕吗?当然,它可以表述得更好一点,但对我来说,这似乎是一个合法的编程问题?编辑:不再需要,它显然是重复的;可能在乌兰巴托。
printf("%s\n", string);
while( string < p ){
    char temp;
    temp = *string;
    *string = *p;
    *p = temp;
}