[解決済み] printfによる文字列と文字
2022-03-03 02:35:26
質問
の使い方に戸惑いました。
%c
と
%s
を次のC言語で作成します。
#include <stdio.h>
void main()
{
char name[]="siva";
printf("%s\n",name);
printf("%c\n",*name);
}
出力は
siva
s
文字列ではポインタは不要なのに、文字%cを表示するためにポインタが必要な理由
を使用すると、エラーが発生します。
printf("%c\n", name);
エラーは
str.c: In function ‘main’:
str.c:9:2: warning: format ‘%c’ expects type ‘int’, but argument 2 has type ‘char *’
解決方法は?
これを試すと
#include<stdio.h>
void main()
{
char name[]="siva";
printf("name = %p\n", name);
printf("&name[0] = %p\n", &name[0]);
printf("name printed as %%s is %s\n",name);
printf("*name = %c\n",*name);
printf("name[0] = %c\n", name[0]);
}
出力は
name = 0xbff5391b
&name[0] = 0xbff5391b
name printed as %s is siva
*name = s
name[0] = s
つまり、'name'は実際にはメモリ上の文字の配列へのポインタなのです。0xbff5391b にある最初の 4 バイトを読んでみると、's', 'i', 'v', 'a' と表示されるでしょう。
Location Data
========= ======
0xbff5391b 0x73 's' ---> name[0]
0xbff5391c 0x69 'i' ---> name[1]
0xbff5391d 0x76 'v' ---> name[2]
0xbff5391e 0x61 'a' ---> name[3]
0xbff5391f 0x00 '\0' ---> This is the NULL termination of the string
ある文字を表示するには、その文字の値をprintfに渡す必要があります。値はname[0]または*nameとして参照できます(配列の場合はname = &name[0] ですので)。
文字列を表示するには、printfに文字列へのポインタを渡す必要があります(この場合、'name' または '&name[0]' となります)。
関連
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み】ISO C90では、C言語での宣言とコードの混在が禁止されています。
-
[解決済み】ポインタへの代入時に互換性のないポインタ型からの初期化警告が発生した
-
[解決済み】エラー:不明な型名'bool'
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] printf/String.Formatに相当するJavaScriptの機能
-
[解決済み] printfは、フォーマット文字列の中に改行がないと、呼び出し後にフラッシュしないのはなぜですか?
-
[解決済み] longをフォーマットするprintfの引数は何ですか?
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] (.text+0x20): `main'への未定義の参照と関数への未定義の参照
-
[解決済み】C言語におけるファイルスコープでの可変長配列の変更
-
[解決済み] テスト
-
[解決済み] struct has no member named
-
[解決済み】EAGAINとはどういう意味ですか?
-
[解決済み】fgetsによるセグメンテーションフォールト(コアダンプ) - と思う。
-
[解決済み】インクリメントオペランドとして lvalue が必要です。
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み】.axfファイルとは何ですか?
-
[解決済み】シンプルなC言語のscanfが機能しない?重複