【问题标题】:How to check if empty array in C如何检查C中是否为空数组
【发布时间】:2012-12-01 22:07:33
【问题描述】:

我在 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
{
    ...
}

即使results[1] 为空,它也始终执行else 条件。

我尝试过results[1] == NULL,但没有成功。

如何查看是否为空?

【问题讨论】:

标签: c arrays


【解决方案1】:

初始化results数组,让所有元素都是NULL

char* results[10] = { NULL };

在发布的代码中,元素是未初始化的,并且会保存随机值。

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

while (i < 10 && result)
{
}

【讨论】:

  • 假设= { NULL } 将所有索引0 到9 设置为NULL 是否正确?如果你想用一些特定的值设置索引 0 到 3,其余的用 NULL 填充怎么办?我可以做类似= { 0, 2, 3, 4, NULL } 的事情吗,期望它用列表中的最后一个元素填充其余部分?
  • @mazunki 假设数组将从 0 到 9 初始化为 NULL 并且您的示例将数组初始化为 array[10] = {0,1,2,3,4} 是正确的5 到 9 的其余元素将初始化为 NULL。您实际上不需要在 4 索引处指定 NULL
【解决方案2】:

C 中不存在“空数组”或“空元素”之类的东西。数组始终包含固定的预定数量的元素,并且每个元素始终包含一些值。

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

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

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

稍后检查元素为

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

【讨论】:

  • 如果不初始化,能否检查数组是否为空? int arr[10];.
猜你喜欢
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 2015-01-13
相关资源
最近更新 更多