[解決済み] C言語でメモリアドレスをprintfする方法
2022-03-04 02:28:03
質問
私のコードは
#include <stdio.h>
#include <string.h>
void main()
{
char string[10];
int A = -73;
unsigned int B = 31337;
strcpy(string, "sample");
// printing with different formats
printf("[A] Dec: %d, Hex: %x, Unsigned: %u\n", A,A,A);
printf("[B] Dec: %d, Hex: %x, Unsigned: %u\n", B,B,B);
printf("[field width on B] 3: '%3u', 10: '%10u', '%08u'\n", B,B,B);
// Example of unary address operator (dereferencing) and a %x
// format string
printf("variable A is at address: %08x\n", &A);
linux mintのターミナルを使ってコンパイルしているのですが、gccを使ってコンパイルしようとすると、次のようなエラーメッセージが表示されます。
basicStringFormatting.c: In function ‘main’:
basicStringFormatting.c:18:2: warning: format ‘%x’ expects argument
of type ‘unsigned int’, but argument 2 has type ‘int *’ [-Wformat=]
printf("variable A is at address: %08x\n", &A);
私がやろうとしていることは、変数Aのメモリ上のアドレスを表示することです。
どのように解決するのですか?
フォーマット指定子を使用する
%p
:
printf("variable A is at address: %p\n", (void*)&A);
この規格では、引数の型が
void*
に対して
%p
指定子で指定します。から
printf
は可変個体関数なので、暗黙のうちに
void *
から
T *
これはC言語の非変数関数では暗黙のうちに起こることです。規格を引用します。
7.21.6 書式付き入出力関数 (C11草案)
p 引数は void へのポインタでなければならない。ポインタの値は 印刷用文字のシーケンスに変換される。 実装で定義された方法で
を使用しているのに対して
%x
であり、これは
unsigned int
一方
&A
は
int *
. の書式指定子について読むことができます。
printfはマニュアルを参照してください。
. printf の形式指定子の不一致により
未定義の動作
.
関連
-
[解決済み】式は変更可能なL値でなければならない
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み] '{'トークンの前に期待される式
-
[解決済み] printf ファミリーを使用して、size_t 変数をポータブルに印刷するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] printf/String.Formatに相当するJavaScriptの機能
-
[解決済み] printfは、フォーマット文字列の中に改行がないと、呼び出し後にフラッシュしないのはなぜですか?
-
[解決済み] longをフォーマットするprintfの引数は何ですか?
-
[解決済み] printfにおけるdoubleの正しい書式指定子
-
[解決済み】boolのprintfフォーマット指定子とは?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「ポインタから異なるサイズの整数へのキャスト」エラーが発生するのはなぜですか?
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み] struct で "warning: useless storage class specifier in empty declaration" (警告: 空の宣言での無駄なストレージクラス指定子)
-
[解決済み] struct has no member named
-
[解決済み】C言語で多重定義を防ぐには?
-
[解決済み】sizeof float (3.0) vs (3.0f)
-
[解決済み] C: エラー: ';'トークンの前に ')' があると予想される
-
[解決済み] テスト
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。
-
[解決済み】ポインタまたはアドレスを印刷するための正しいフォーマット指定子?