首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C函数中的SIGSEGV

C函数中的SIGSEGV
EN

Stack Overflow用户
提问于 2016-10-15 02:10:57
回答 1查看 160关注 0票数 1

我的功能有问题。

当函数获得这样的参数时,一切都正常。

char text[50] = "Liquorice gummies macaroon";

但是当我发送这个的时候,我得到了SIGEGV

代码语言:javascript
复制
char  *text = "Liquorice gummies macaroon";

我的函数:

代码语言:javascript
复制
char *sort(char *text) {

    int length = strlen(text);
    char *sortString = text;

    if (length >1){
        shell_sort(sortString, length);
        return sortString;
    } else if(length == 1) {
        return text;
    }
}

在函数排序中,我调用了shell_sort

代码语言:javascript
复制
void shell_sort(char *text, int size) {

    int gap, temp, i , j;

    for (gap = size/2; gap > 0; gap /= 2) {

        for (i = gap; i<size; i++) {
            temp = text[i];

            for (j = i; j >= gap ;j-=gap) {
                if (temp < text[j-gap]) {
                    text[j] = text[j-gap];
                } else {
                    break;
                }
            }
            text[j] = temp;
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-10-15 02:15:43

,但是当我发送这个的时候,我得到了一个信号

char *text =“甘草胶杏仁饼”;

这是因为您的函数shell_sort()修改了传递给它的参数,而修改字符串文字是。这就是为什么它会导致段错误的原因(顺便说一句,C标准不能保证段错误)。

当函数获得这样的参数时,一切正常

char text50 =“甘草胶马卡龙”;

当您从字符串文字初始化char数组时,字符串文字将被复制到数组中,您可以对其进行修改。因此,它的工作方式与您预期的一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40049558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档