我在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
但没有成功。
我如何检查它是否为空?
答案 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 */