「セグメンテーション違反...」が発生する理由と、このコードでそれを修正する方法を誰かが説明してもらえますか?
#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 文字を削除しますか?