为什么这个字符串反转C代码会导致分段错误?

为什么这个字符串反转C代码会导致分段错误?

我试图编写代码来反转字符串(我只是想更好地进行C编程和指针操作),但我不知道为什么我会得到一个分段故障:

#include <string.h>void reverse(char *s);int main() {
    char* s = "teststring";
    reverse(s);

    return 0;}void reverse(char *s) {
    int i, j;
    char temp;

    for (i=0,j = (strlen(s)-1); i < j; i++, j--) {
        temp = *(s+i);     //line 1
        *(s+i) = *(s+j);   //line 2
        *(s+j) = temp;     //line 3
    }}

导致分段错误的是第2行和第3行。我知道也许有更好的方法来做这件事,但我想找出具体的在我的代码中导致分割错误。

更新*我已按要求提供了调用功能。


慕莱坞森
浏览 587回答 3
3回答

陪伴而非守候

您的代码可能因为以下几个原因而出现分段错误。以下是脑海中浮现的那些s为空。s指向保存在只读内存中的const字符串。s不为空终止。我认为#2是最有可能的。你能告诉我们反向呼叫的地址吗?编辑基于你的样本#2绝对是答案。C/C+中的字符串文本不可修改。正确的类型实际上是const char*而不是char*..您需要做的是将一个可修改的字符串传递到该缓冲区。快速示例:char*&nbsp;pStr&nbsp;=&nbsp;strdup("foobar");reverse(pStr);free(pStr);

森栏

你在测试像这样的东西吗?int&nbsp;main()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;*&nbsp;str&nbsp;=&nbsp;"foobar"; &nbsp;&nbsp;&nbsp;&nbsp;reverse(str); &nbsp;&nbsp;&nbsp;&nbsp;printf("%s\n",&nbsp;str);}这使得str成为字符串文本,您可能无法编辑它(对我来说是分段错误)。如果你定义char * str = strdup(foobar)它应该很好(对我来说)。
打开App,查看更多内容
随时随地看视频慕课网APP