我的功能有问题。
当函数获得这样的参数时,一切正常
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;
}
}
}
答案 0 :(得分:0)
但是当我发送这个时,我得到了SIGEGV
char * text =&#34; Liquorice gummies macaroon&#34 ;;
那是因为你的函数shell_sort()
修改了传递给它的参数,修改字符串文字是undefined behaviour。这就是它导致段错误的原因(顺便说一下,C标准不保证段错误。)
当函数获得这样的参数时,一切正常
char text [50] =&#34; Liquorice gummies macaroon&#34 ;;
从字符串文字初始化char
数组时,字符串文字复制到数组中,您可以修改该数组。所以它按预期工作。