我的功能有问题。
当函数获得这样的参数时,一切都正常。
char text[50] = "Liquorice gummies macaroon";
但是当我发送这个的时候,我得到了SIGEGV
char *text = "Liquorice gummies macaroon";我的函数:
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
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;
}
}
}发布于 2016-10-15 02:15:43
,但是当我发送这个的时候,我得到了一个信号
char *text =“甘草胶杏仁饼”;
这是因为您的函数shell_sort()修改了传递给它的参数,而修改字符串文字是。这就是为什么它会导致段错误的原因(顺便说一句,C标准不能保证段错误)。
当函数获得这样的参数时,一切正常
char text50 =“甘草胶马卡龙”;
当您从字符串文字初始化char数组时,字符串文字将被复制到数组中,您可以对其进行修改。因此,它的工作方式与您预期的一样。
https://stackoverflow.com/questions/40049558
复制相似问题