我不知道什麼是錯我的代碼:分段錯誤
#include <stdio.h>
#include <string.h>
char* splitstr(char* str, int part, char search) {
char* out;
int i;
int result = 0;
for(i=0; str[i]!='\0'; i++) {
if(str[i] == search) {
result = 1;
break;
}
}
if(result == 0) {
if(part == 1) {
return str;
} else {
return "";
}
}
int j;
int k;
if(part == 2) {
for(j = 0; j < i; j++) {
out[j] = str[j];
}
out[j] = '\0';
} else {
for(k = 0,j = i+1; j <= strlen(str)-1; j++, k++) {
out[k] = str[j];
}
out[k] = '\0';
}
return out;
}
}
int main() {
printf("Starting program:\n");
char* str = "Hello World!";
char* a = splitstr(str, 1, ' ');
char* b = splitstr(str, 1, ' ');
printf("A is %s\n", a);
printf("B is %s\n", b);
}
它返回的輸出如下:
Starting program:
Segmentation Fault: 11
與gdb
調試後,我發現,錯誤是在線路30上發生(通過使用斷點),在循環的第一次迭代中,當它試圖設置out[0]
(out[k]
)到str[6]
(str[j]
)。爲什麼會觸發分段錯誤?我只是將字符串中的一個字符更改爲另一個字符!
注意:發佈的代碼在聲明之後有一個不尋常的大括號'}':'return out;' – user3629249