void reverse(char *)中分段错误的原因是什么?

时间:2015-03-22 18:12:48

标签: c segmentation-fault

当我运行此代码时,我遇到了分段错误。 我该如何解决?

#include <stdio.h>

void reverse(char *str)
{
    char *end=str;
    char temp;
    while(*end)
    {
    ++end;
    }
    --end;

    while(str < end)
    {
        temp=*str;
        *str=*end;
        *end=temp;
        str++;
        end--;
    }
}

void main()
{
    char *s="random";
    reverse(s);
}

1 个答案:

答案 0 :(得分:1)

您正试图扭转常数值。现在这是不可能的。因为您正在尝试更改只读内存的一部分。

  

解决方案:只需使用char s[]="random";

即可

上一个案例:s指向常量“随机”。

在这种情况下:s指向堆栈内存中字符串文字“random”的本地副本。