前提・実現したいこと
①printf文でwork[0]の値を出力するときの変換指定子を「%d」にすると「15」が出力されるのかが分からないです。
char型なので変換指定子は「%s」なのではないかと思っています。
②main.c(3)のprintf("%d",work[0]); → printf("%s",work[0]);にするとメモリアクセス違反となるのかも教えていただきたいです。
該当のソースコード
main.c
void main(void) {
char work[1] = {15};
printf("%d",work[0]);
}
試したこと
①変換指定子について調べたが、今回の事象についての記事を見つけることができなかった。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
①printf文でwork[0]の値を出力するときの変換指定子を「%d」にすると「15」が出力されるのかが分からないです。
char型なので変換指定子は「%s」なのではないかと思っています。
printf("%d",work[0]); で work配列の[0]を指定していますね。
なので、当然ながら15が表示されます。
②main.c(3)のprintf("%d",work[0]); → printf("%s",work[0]);にするとメモリアクセス違反となるのかも教えていただきたいです。
work配列の[0]には数値の15が入っていますね。
つまりアドレス15をprintfに渡しているのでメモリアクセス違反になります。
work配列の先頭アドレスを指定するときはwork
または&work[0]
と書きましょう。
ちなみに値15は制御コードなので何も表示されないか文字化けすると思います。
またC言語において文字列はNULL終端である必要があるので、work配列の領域を超えて表示されるおそれがあります。
投稿2020/05/29 02:54
総合スコア17000
0
ベストアンサー
①printf文でwork[0]の値を出力するときの変換指定子を「%d」にすると「15」が出力されるのかが分からないです。
数値の15を数値として表示するなら、%d
が正しいです。char
型の引数(char *
ではない1個だけ)を可変長引数に渡すと、int
に自動変換されます。
②main.c(3)のprintf("%d",work[0]); → printf("%s",work[0]);にするとメモリアクセス違反となるのかも教えていただきたいです。
%s
は、char *
を文字列として表示したいときに使うものです。charの値を渡してしまうと、それをポインタとして参照しようとするので、正しく動作しません。
投稿2020/05/29 02:50
総合スコア146018
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
%sは、文字列のフォーマット文字列です
char型は文字型ではなく、1バイト幅の整数型、です。
投稿2020/05/29 02:43
総合スコア88042
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/29 03:33
2020/05/29 04:37
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/29 04:37