###わからないこと
char型配列の初期化で
C
1char a[8] = {0}; 2char b[8] = "";
だと何が違いますか?
どう確かめたらいいでしょうか...
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
質問中のふたつの例は、結果に違いがありません。
実態として広く処理系が提供されている ISO/IEC 9899:1999 (JISX3010:2003) だと項目 6.7.8 に、最新仕様である ISO/IEC 9899:2018 だと 6.7.9 に書かれています。
JIS から初期化に関連する部分を抜き出すと
集成体型の要素又はメンバの個数より波括弧で囲まれた並びにある初期化子が少ない場合、または大きさが既知の配列の要素数よりその配列を初期化するための文字列リテラルの文字数が少ない場合、その集成体型の残りを、静的記憶域期間をもつオブジェクトと同じ規則で暗黙に初期化する。
となっていて、静的記憶域期間をもつオブジェクトの説明を見ると
そのオブジェクトの型が算術型の場合、 (正又は符号無しの) 0 に初期化する。
という場合に当てはまります。
よって、質問中の a
と b
はいずれも全ての要素が 0
で初期化されます。
投稿2020/01/02 09:11
総合スコア5684
0
簡単なメモリダンプしました。
text
1usr ~/Project/c % ./a.out 2+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F| -- ASCII -- 3--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---------------- 400 00 00 00 00 00 00 00 ........ 5+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F| -- ASCII -- 6--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---------------- 700 00 00 00 00 00 00 00 ........ 8usr ~/Project/c % cat main.c 9#include <stdio.h> 10 11extern void dump(void *buf, int size); 12 13int main(void) 14{ 15 char a[8] = {0}; 16 char b[8] = ""; 17 18 dump(a,sizeof a); 19 dump(b,sizeof b); 20 21 return 0; 22} 23
結果としては変わらないようです。
投稿2020/01/02 09:14
総合スコア6851
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。