2

初期化してchar x[16]いないものがあります。何かが割り当てられてxいるかどうか、または実行時にどのように作成されるかをテストする必要があります。どうすればいいですか?ありがとうございました

サンプルコード

int main(int argc, char** argv) {
char x[16];

 //<other part of the code>
if(x is an empty char array (not assigned anything) then skip the next line) {
 //blank
}else {
//<rest of the code>
}
return 0;}

PS:試しましたがmemchar(x, '\0', strlen(x))、 char配列にはデフォルトで含まれif(x[0] == '\0')if(!x[0])いないため、希望どおりに機能しません。\0

4

2 に答える 2

3

次のように初期化する必要があります。

char x[16] = { 0 }; // note the use of the initializer, it sets the first character to 0, which is all we need to test for initialization.

if (x[0] == 0)
  // x is uninitialized.
else
  // x has been initialized

プラットフォームで使用できる場合のもう1つの方法は、です。これはalloca、スタックにデータを割り当てます。あなたはそのようにそれを使うでしょう:

char *x = NULL;

if (x == NULL)
    x = alloca(16);
else 
    // x is initialized already.

スタックに割り当てるためalloca、割り当てるデータを必要とせずfree、データに明確な利点があります。malloc

于 2012-05-26T15:35:30.347 に答える
1

変数を初期化することは良い習慣であり、そうでない場合はコンパイラーを使用して警告することができます。gccを使用すると、-Wuninitializedフラグを使用します。

このように文字配列変数を変更することにより、コンパイル時に配列を初期化できます。

char x[16] = {0};

次にテストして確認します

if ('\0' != x[0])
{
   <do something>; 
}
else
{  
   <initialize character string>;
}
于 2012-05-26T15:44:50.107 に答える