重複の可能性:
文字列リテラルは C でどのようにコンパイルされますか?
以下の小さなコードを書きました。このコードでは、1 番目と 2 番目の「hello」文字列のアドレスが比較されると思います。私はこれで混乱しています。一見すると、両方の文字列が読み取り専用メモリに格納されるため、アドレスが異なると思いました。しかし、実行後に「等しい」が出力されました。
objdump を見たとき、hello という文字列が表示されませんでした。それらを保存するために変数を使用していないことは理解していますが、「こんにちは」はどこに保存されますか。
STACK に保存されますか?? またはコードセグメントに保存されますか??
#include<stdio.h>
int main()
{
if ("hello" == "hello")
printf("\n equal ");
else
printf("\n not equal");
return 0;
}
if 条件を に変更すると if ("hello" == "hell1")
、「等しくない」と出力されました。繰り返しますが、文字列はどこにどのように格納されますか。STACK に保存されますか?? またはコードセグメントに保存されますか??
ここで誰かが私に精巧な答えをくれたら本当にありがたいです。ありがとう