我在C中有一个大小为10的char指针数组。
我正在尝试循环并打印出每个字符串。并非所有元素都已填充,我相信这会导致错误。如何检查元素是否已填充。
这是我尝试过的。当我运行我的代码时,我发现第一个元素被填充并且值被打印但是我得到了一个错误。
char *errors[10];
ret = doMessages(&h, errors);
for (i = 0; i < 10; i++)
{
if(errors[i] != NULL)
{
printf("%s", errors[i]);
}
}
答案 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));