• ベストアンサー

NULLで初期化

C言語で char name[256]; のnameをNULLで初期化する場合どういう記述になりますか。

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

  • ベストアンサー
回答No.1

for(int i=0;i<256;i++) name[i]=NULL; または、 memclr(またはmemset) を利用。

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

#2の方も書いていますが、NULLというのはポインタ用の定数なので、char 型の変数に代入してはいけません。 コンパイラによっては、#define NULL 0 と定義されているため、たまたまエラーにならないケースも多いですが、間違いには違いありません。 #define NULL ((void *)0) と定義されている場合もあり、その場合はコンパイル時にエラーが出るはずです。 文字のヌルは普通 NUL と書きます。標準では定義されていない記号名なので Cで書くときは、0 または '\0' です。 #define NUL '\0' #defile TAB '\t' #define NL '\n' 等と自分で文字定数名を定義してそれを使ってもいいですけど、直接 '\x' の形式を使うのが普通だと思います。 初期化のやり方はどの方の回答でもいいですが、#1,#3の方の回答を使う時は、NULL を '\0' に訂正する必要があります。 エラーにならなければいいじゃないかと思われるかもしれませんが、'\n' が多く環境で 10 だからと言って、1から10までの合計を求めるのに、int s,i; s=NULL; for(i=!NULL;i<='\n';++i) s+=i; と書くのがおかしいのと同じレベルの間違いです。

noname#25358
noname#25358
回答No.3

 ちなみにですね。  タイプが char 型の配列ですので、ただ純粋に文字列として使うのであれば、"name[0] = NULL;" もしくは "name[0] = '\0';" と記述してやればOKです。  この NULL のことを「ヌルターミネーター」と呼ぶのは……ご存知ですよね?(^_^; ( NULL と '\0' のどっちを使うかは、コンパイラの種類に寄ります。前者のほうが概念的に分かりやすくて個人的には好きなんですが、C++コンパイラでないと使えないことがあるようです。意味はどっちも全く同じです)  しかし、char 型の配列を、文字列としてではなく、バイトアレイ(つまりバイナリ型データ)として使うのであれば、ヌルターミネーターを入れるだけでは駄目で、全部のメモリをヌルでクリアしてやる必要があります。  そんなときは "memset( name, NULL, sizeof(name) );" などと記述してやらなければいけません。  どっちを使うかは、そのときそのときの用法次第ですので、ここでは答えられません。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

char配列なので、NULLで初期化ではなく、'\0'で初期化でしょう。 #1の方の回答の他、宣言時に char name[256] = {'\0'}; でも。

関連するQ&A