10

私はCで次のコードを持っています:

int i = 0;
char delims[] = " \n";
char *result = NULL;
char * results[10];
result = strtok( cmdStr, delims );
while( result != NULL )
{
     results[i] = result;
     i++;
     result = strtok(NULL, " \n");
}

if(!results[1])
{
    printf("Please insert the second parameter...\n");
}
else
{
    ...
}

が空elseの場合でも、常に条件を実行します。results[1]

私は試しましresults[1] == NULLたが、成功しませんでした。

空かどうかを確認するにはどうすればよいですか?

4

2 に答える 2

13

resultsすべての要素がNULL次のようになるように配列を初期化します。

char* results[10] = { NULL };

投稿されたコードでは、要素は単一化されており、ランダムな値を保持します。

さらに、results配列の境界を超えないようにします。

while (i < 10 && result)
{
}
于 2012-12-13T22:32:54.847 に答える
8

Cには、「空の配列」や「空の要素」などはありません。配列は常に固定された所定の数の要素を保持し、各要素は常に何らかの値を保持します。

「空の」要素の概念を導入する唯一の方法は、それを自分で実装することです。「空の値」として使用するために予約する要素値を決定する必要があります。次に、この値で配列要素を初期化する必要があります。後で、要素をその「空の」値と比較して、それらが...まあ、空であるかどうかを確認します。

あなたの場合、問題の配列はポインタで構成されています。この場合、「空の」要素を指定する予約値としてnullポインター値を選択することは、明らかに良い選択です。結果の配列を次のように宣言します

char * results[10] = { 0 }; // or `= { NULL };`

後で要素を次のように確認します

if (results[i] == NULL) // or `if (!results[i])`
  /* Empty element */
于 2012-12-13T22:42:27.613 に答える