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;
}