如何检查C中是否为空数组

时间:2012-12-13 22:31:17

标签: c arrays

我在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但没有成功。

我如何检查它是否为空?

2 个答案:

答案 0 :(得分:9)

初始化results数组,使所有元素都为NULL

char* results[10] = { NULL };

在发布的代码中,元素是单元化的,并且将保留随机值。

此外,防止超出results数组的范围:

while (i < 10 && result)
{
}

答案 1 :(得分:6)

在C中没有“空数组”或“空元素”这样的东西。数组总是保存一个固定的预定数量的元素,每个元素总是保留一些值。

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

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

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

稍后将元素检查为

if (results[i] == NULL) // or `if (!results[i])`
  /* Empty element */