我试图扭转一个字符串到位.
void reverseStr(char *str)
{
int i;
int length;
int last_pos;
length = strlen(str);
last_pos = length-1;
for(i = 0; i < length / 2; i++)
{
char tmp = str[i];
str[i] = str[last_pos - i];
str[last_pos - i] = tmp;
}
}
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400893 in reverseStr (str=0x400974 "Haus") at main.c:102
102 str[i] = str[last_pos - i];
(gdb) print i
$1 = 0
(gdb) print last_pos
$2 = 3
(gdb) print str
$3 = 0x400974 "Haus"
(gdb) print str[3]
$4 = 115 's'
Run Code Online (Sandbox Code Playgroud)
谢谢你的阅读.我不明白,这个指令怎么会导致错误?问候 :)
代码reverseStr很好,问题出在调用代码中.您几乎肯定会将字符串文字或其他只读内存传递给该函数.
您的调用代码最有可能是:
char *str = "my string";//str points to a literal which cannot be modified
reverseStr(str);
Run Code Online (Sandbox Code Playgroud)
但是你需要传递可写内存.像这样:
char str[] = "my string";
reverseStr(str);
Run Code Online (Sandbox Code Playgroud)