有人可以解释一下为什么我得到“分段错误......”以及如何在这段代码上修复它吗?
#include<stdio.h>
int str_length(char *s) {
int length = 0, i;
for(i = 0; *s; i++) {
s++;
}
return i;
}
char *strdel(char *s, int pos, int n) {
int i;
char *p, str[] = "";
p = str;
for(i = 0; i < str_length(s) - n + 1; i++) {
if(i >= pos) {
*(p + i) = *(s + i + n);
}
else {
*(p + i) = *(s + i);
}
}
s = str;
return s;
}
int main() {
char *str = "abcdef";
printf("str_lengh: %d\n", str_length(str));
printf("strdel: %s\n", strdel(str, 1, 2));
return 0;
}
我得到这个输出:
str_lengh: 6
strdel: adef
Segmentation fault (core dumped)
另外,有没有更好的方法来创建一个函数: char *strdel(char *s, int pos, int n); 从位置 pos 中删除的 n 个字符比我删除的字符多吗?