• ベストアンサー

static変数の配列の初期値を空文字列にする一般的な方法

いつもお世話になっております。 static変数の配列の初期値を空文字列(各要素が'\0')にしたいです。 static変数なので放って置いても各要素に'\0'が入りますが、 初期値として空文字列にしている事を明記したいです。 そこで以下の様な方法を考えてみました。 (1)初期値に何もせず、コメントを書いておく (2)初回起動フラグを持ち、フラグが立っていれば空文字列にする (3)初期値にnull文字をSTR_LENの数だけ書く (4)初期値の先頭のみnull文字にし、残りは省略する どの様な方法が一般的でしょうか? 上記以外にもあれば、教えていただければ幸いです。 また、以下は私が考えたそれぞれの方法のソースです。 -------------------------------------------------------------------------------- #include <stdio.h> #include <string.h> #define STR_LEN 16 #define FLAG_ON (1) #define FLAG_OFF (0) -------------------------------------------------------------------------------- /* 初期値に何もせず、コメントを書いておく */ -------------------------------------------------------------------------------- void clear_1(void) { static char hoge[STR_LEN]; /* 空文字列 */ } -------------------------------------------------------------------------------- /* 初回起動フラグを持ち、フラグが立っていれば空文字列にする */ -------------------------------------------------------------------------------- void clear_2(void) { static char hoge[STR_LEN]; static int first = FLAG_ON; if(first == FLAG_ON){ strncpy(hoge, "\0", STR_LEN); first = FLAG_OFF; } } -------------------------------------------------------------------------------- /* 初期値にnull文字をSTR_LENの数だけ書く */ -------------------------------------------------------------------------------- void clear_3(void) { static char hoge[] = {'\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0'}; } -------------------------------------------------------------------------------- /* 初期値の先頭のみnull文字にし、残りは省略する */ -------------------------------------------------------------------------------- void clear_4(void) { static char str[STR_LEN] = {'\0', }; } --------------------------------------------------------------------------------

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★面白い質問です。 >(1)初期値に何もせず、コメントを書いておく >(2)初回起動フラグを持ち、フラグが立っていれば空文字列にする >(3)初期値にnull文字をSTR_LENの数だけ書く >(4)初期値の先頭のみnull文字にし、残りは省略する >どの様な方法が一般的でしょうか?  staticな変数はプログラムが起動したときに全要素をゼロの値で埋め尽くします。  よって(2)~(4)の方法はする必要性がありません。普通は(1)でしょう。  分かりやすく記述したいのであれば  『static char str[STR_LEN] = { 0 };』  で十分だと思います。  staticな変数の意味をもう一度確認して下さい。 ・以上。

sora_naegino
質問者

お礼

ご回答ありがとうございます。 static char hoge[STR_LEN] = {0}; の方法にしようと思います。

その他の回答 (3)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

やはり、 static char hoge[STR_LEN] = {0}; でしょうね。 空文字列という意味では "" ですが、全要素を0にする必要があるとのことですので。 ちなみにC++では、文字列リテラルを初期化子とした場合には、残りの要素が 0 で埋まることが保証されません。

sora_naegino
質問者

お礼

ご回答ありがとうございます。 static char hoge[STR_LEN] = {0}; の方法にしようと思います。

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.3

>/* 初期値に何もせず、コメントを書いておく */ コメントには「/* 空文字列 */」ではなく、何の為に 使用する変数であるかを記述するようにして下さい。 コメントを見なくてもstatic変数が初期起動時にクリア される事はすぐに判るようになりますが、変数が何の為 のものであるかは、プログラム作ってから時間がたって いたり他人がプログラムを修正する時に解析するのが 困難になりバグを発生しやすくする原因となります。 #1年後・数年後の自分は他人であるつもりで、他人が #見て判り易いプログラムを書くようにすることが大事 #です。

sora_naegino
質問者

お礼

ご回答ありがとうございます。 今後は初期値の目的を書く様にします。

  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

空文字列なんだから普通は  char str[STR_LEN] = ""; にするんじゃないかな。 あと、空文字列って普通は先頭が'\0'の文字配列のことを言うと思うけど。(全要素じゃなくて)

sora_naegino
質問者

お礼

ご回答ありがとうございます。 空文字列は全要素を0クリアするものと思っておりました。 static char hoge[STR_LEN] = {0}; の方法にしようと思います。

関連するQ&A