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 中不存在“空数组”或“空元素”之类的东西。数组始终包含固定的预定数量的元素,并且每个元素始终包含一些值。

引入“空”元素概念的唯一方法是自己实现它。您必须决定将保留哪个元素值用作“空值”。然后你必须用这个值初始化你的数组元素。稍后,您会将元素与“空”值进行比较,以查看它们是否......好吧,是空的。

在您的情况下,有问题的数组由指针组成。在这种情况下,选择空指针值作为指定“空”元素的保留值显然是一个不错的选择。将结果数组声明为

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

稍后将元素检查为

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