[解決済み] 異なる文字列リテラルへの2つのcharポインタのアドレスが同じである
2023-08-25 10:49:04
質問
#include<stdio.h>
#include<string.h>
int main()
{
char * p = "abc";
char * p1 = "abc";
printf("%d %d", p, p1);
}
2つのポインタの値を印刷すると、同じアドレスが印刷されます。なぜでしょうか?
どのように解決するのですか?
同じ内容の異なる2つの文字列リテラルを同じメモリ位置に配置するか、異なるメモリ位置に配置するかは、実装に依存します。
を常に扱う必要があります。
p
と
p1
は、同じアドレスを指しているかどうか分からないので、(同じ内容であっても)2つの異なるポインタとして扱われます。コンパイラの最適化に頼るべきではありません。
C11 標準、6.4.5、文字列リテラル、セマンティクス
これらの配列は、その要素が適切な値を持っている場合、区別されるかどうかは特定されていません。 の要素が適切な値を持っている場合、これらの配列が区別されるかどうかは未定です。プログラムがこのような配列を変更しようとした場合 このような配列を変更しようとした場合、その動作は未定義です。
印刷時の書式は必ず
%p
:
printf("%p %p", (void*)p, (void*)p1);
参照 この回答 をご覧ください。
関連
-
_CRT_SECURE_NO_WARNINGS エラーメッセージ、解決方法
-
解決済み] g++ コンパイルエラー: ')'トークンの前に一次式があることが予想される
-
赤線の位置は必ずしも間違っていない:式は変更可能なlvalueでなければならないエラーは、この文とは別の場所に存在する可能性があります。
-
[解決済み] Linux Socket write() によるBad File Descriptor C
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み] 演算子 *, /, +, -, % を使わずに 3 で割る。
-
[解決済み] C言語でランダムなint型を生成するには?
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み] パラメータと戻り値におけるポインタと値の比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
_CRT_SECURE_NO_WARNINGS エラーメッセージ、解決方法
-
#137: 式は変更可能なlvalueでなければならない問題 // 文字列配列の代入問題
-
Solve Dev-c++ [エラー] 'for' ループの初期宣言は、C99 または C11 モードでのみ許可されます。
-
未定義の `__isoc99_sscanf' への参照
-
C: 1を求める! + 2! + 3! + ... + n! (ループ)
-
[解決済み] C言語でメモリアドレスをprintfする方法
-
[解決済み] char *とchar[]の違い [重複]
-
[解決済み] 演算子 *, /, +, -, % を使わずに 3 で割る。
-
[解決済み] なぜC言語では構造体を頻繁にtypedefする必要があるのですか?
-
[解決済み] C 言語の配列へのポインタ/ポインタの配列の曖昧さ解消