非常に単純な文字列反転関数を作成したところ、理解できない問題に直面しました。
void reverse(char *data) {
int length = 0,i;
char *temp,*start,*end;
start = data;
end = data;
length = strlen(data);
end = end + (length -1);
for(i=0; i< length/2; i++) {
*temp = *end;
*end = *start;
*start = *temp;
start++;
end--;
}
}
int main()
{
int length1 = 0;
char data1[100] = "I am megharaj from india";
printf("data1 %s\n", data1);
reverse(data1);
printf("reversed\n");
printf("data1 %s\n", data1);
return 0;
}
これによりセグメンテーション違反が発生しますが、をに変更するchar *temp
とchar temp
、以下に示すようにすべてが正常に機能します。
void reverse(char *data) {
int length = 0,i;
char temp,*start,*end;
start = data;
end = data;
length = strlen(data);
end = end + (length -1);
printf("length %d\n", length);
for(i=0; i< length/2; i++) {
temp = *end;
*end = *start;
*start = temp;
start++;
end--;
}
}
理由がわかりません。説明していただけますか?