繁体   English   中英

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

[英]Segmentation fault when trying to copy elements of a string (C)

我正在尝试解决一个学校上的问题,该问题要求我在适当的地方扭转弦(等等)。 我已经为此苦苦挣扎了一段时间,没有想法..这是我的代码:

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给我一个分割错误。 我知道这一定是简单的事情,我很想念,但是我没有想法,网上的答案也无济于事。而且我的时间不多了。请有人启发我,我在做什么错了?

好吧,您的代码没有就位(否则您将不会使用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()。

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

我认为您想写rev[i]=s[...]

如果需要就地执行操作,则可以动态地为"hello"strdup )或在堆栈上分配内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM