私はこのコードなぜこのCコードは文字列を変更せず、バッファオーバーフローを引き起こしますか?
#include <stdio.h>
int main()
{
char String[] = "Hello the world!";
char *pointer = String;
int i;
printf(" %s\n", pointer);
pointer = "Helllooooo the worlldddddd";
printf("Hello %s\n", pointer);
printf("Hello %s\n", String);
return 0;
}
を書いたが、私はこの行が正常に動作方法を理解することはできません。
pointer = "Helllooooo the worlldddddd";
いますが、それはString
値を変更することができませんでしたが、それは文字の元の数よりも多くを示して見ての通り、私は、この出力
Hello the world!
Hello Helllooooo the worlldddddd
Hello Hello the world!
を得ました。これはバッファオーバーフローを引き起こすべきではありませんか?それは他の変数を破壊しないだろうか?あなたが行
pointer="Helllooooo the worlldddddd";
を書くとき
'「こんにちは、世界!」'と '「Helllooooo worlldddddd」'メモリの2つの異なる部分にある2つの異なる文字列が、あります。ポインタ 'と= ...'、あなたが(その文字列を指すように設定する、すなわち)これらの文字列のいずれかのアドレスに 'pointer'を設定しています。 –