Reverse a string in c
本问题已经有最佳答案,请猛点这里访问。
我正在尝试将字符串反向转换。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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' |
感谢您的阅读。
我不明白,这条指令怎么会导致错误?问候:)
您的呼叫代码很可能是:
1 2 | char *str ="my string";//str points to a literal which cannot be modified reverseStr(str); |
但是您需要传递可写内存。像这样:
1 2 | char str[] ="my string"; reverseStr(str); |
您正在将字符串文字传递给函数。字符串文字在C中不可修改。
1 2 | char *p ="this string is non modifiable"; reverseStr(p); // undefined behavior |
使用由字符串初始化的数组代替:
1 2 | char p[] ="this string is modifiable"; reverseStr(p); // OK |
这取决于您如何调用此函数。
- 如果要传递字符串常量的地址(将类型为{char * str = " String "}的定义称为字符串常量。将字符串常量放入可执行文件的.rodata节中),则\\会收到例外。
- 如果要传递数组的地址(char arr [] = " String "),则该函数将起作用。