環境
私は C を学んでいて、ポインターを使用してその場で文字列を逆にしようとしています。(配列を使用できることは知っています。これは、ポインターについて学習することに関するものです。)
問題
以下のコードを実行しようとすると、セグメンテーション違反が発生し続けます。GCCはこの行が気に入らないよう*end = *begin;
です。何故ですか?
特に私のコードは、別の質問ですでに説明されている悪意のない C 関数とほぼ同じであるためです。
#include <stdio.h>
#include <string.h>
void my_strrev(char* begin){
char temp;
char* end;
end = begin + strlen(begin) - 1;
while(end>begin){
temp = *end;
*end = *begin;
*begin = temp;
end--;
begin++;
}
}
main(){
char *string = "foobar";
my_strrev(string);
printf("%s", string);
}