C中的char指针数组 - 区分空元素

时间:2012-02-22 11:39:51

标签: c string pointers

我在C中有一个大小为10的char指针数组。

我正在尝试循环并打印出每个字符串。并非所有元素都已填充,我相信这会导致错误。如何检查元素是否已填充。

这是我尝试过的。当我运行我的代码时,我发现第一个元素被填充并且值被打印但是我得到了一个错误。

char *errors[10];
ret = doMessages(&h, errors);
for (i = 0; i < 10; i++)
{
    if(errors[i] != NULL)
    {
        printf("%s", errors[i]);
    }
}

3 个答案:

答案 0 :(得分:4)

errors未初始化,因此元素可以是任何值,特别是可能不是NULL。改为:

char *errors[10] = { 0 }; /* Initialise all elements to NULL. */

答案 1 :(得分:0)

好吧,可能只填充了errors的第一个元素。其余的是垃圾值(可能是NULL,可能是任何东西),所以你的检查(!=NULL)并没有真正检查元素是否已填充。

我建议您在doMessages之前初始化数组,(char *errors[10]={0};之类的内容,然后检查errors[i]!=NULL就会有意义。

答案 2 :(得分:0)

您没有将数组中的值显式初始化为NULL,因此它们包含以前存在于存储数组的内存位置中发生的任何事情。

要初始化,请使用

之类的内容
char *errors[10] = { 0 };

您也可以对memset执行相同的操作:

char *errors[10];
memset(errors, 0, sizeof(errors));