尝试复制字符串元素时出现分段错误(C)

时间:2014-11-13 23:33:27

标签: c segmentation-fault

我正在努力解决学校的问题,这要求我将字符串转换到位(除其他外...)。我一直在努力解决这个问题,而且我没有想法......这是我的代码:

void strRev(char*s)
{
    int i = 0;
    int length = strlen(s);
    char*rev = (char*)malloc((length+1)*sizeof(char));

    strcpy(rev,s);

    for(i;i<length;i++)
        s[i] = rev[length - 1 - i];

    printf("%s    %s",rev,s);
}

int main()
{
    char * test = "hello";
    strRev(test);
}

当我在Visual Studio中单步执行时,它会在到达for循环内的行时挂起。 Unix给了我一个分段错误。我知道这一定是我想念的简单,但是我没有想法,网上的答案都没有帮助......而且我的时间已经不多了......有人请赐教,我做错了什么?

2 个答案:

答案 0 :(得分:1)

好吧,你的代码没有到位(否则你不会使用malloc,为什么你还在使用sizeof(char)?)。

试试这个:

void strRev(char*s)
{
    int i, len;
    char tmp;
    len = strlen(s);
    for(i = 0; i < (len >> 1); ++i)
    {
       tmp = s[len - 1 - i];
       s[len - 1 - i] = s[i];
       s[i] = tmp;
    }
}

然后根据评论建议修改你的main()。

答案 1 :(得分:1)

test指向静态分配的缓冲区,不得修改。您可以通过分配s[i]=rev[...]来修改它。这会导致段错误。

我想你想写rev[i]=s[...]

如果您需要这样做,那么动态("hello")或堆叠为strdup分配内存。