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

C中的字符指针数组-区分空元素,c,string,pointers,C,String,Pointers,我在C中有一个大小为10的字符指针数组 我正在尝试循环并打印每个字符串。并不是所有的元素都被填充,我相信这会导致我出错。如何检查元素是否已填充 这就是我尝试过的。当我运行代码时,我发现第一个元素被填充,并且值被打印出来,但随后我得到一个错误 char *errors[10]; ret = doMessages(&h, errors); for (i = 0; i < 10; i++) { if(errors[i] != NULL) { printf(

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

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

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

char *errors[10];
ret = doMessages(&h, errors);
for (i = 0; i < 10; i++)
{
    if(errors[i] != NULL)
    {
        printf("%s", errors[i]);
    }
}
错误未初始化,因此元素可以是任何值,特别是不能为NULL。改为:

char *errors[10] = { 0 }; /* Initialise all elements to NULL. */
错误未初始化,因此元素可以是任何值,特别是不能为NULL。改为:

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

嗯,可能只填充了错误的第一个元素。其余的是垃圾值,可能为NULL,也可能是任何值,所以请检查=NULL并不真正检查元素是否已填充


我建议您在doMessages之前初始化数组,比如char*errors[10]={0};,然后检查错误[i]=NULL将有意义。

嗯,可能只填充了错误的第一个元素。其余的是垃圾值,可能为NULL,也可能是任何值,所以请检查=NULL并不真正检查元素是否已填充


我建议您在doMessages之前初始化数组,比如char*errors[10]={0};,然后检查错误[i]=空值是有意义的。

您没有显式地将数组中的值初始化为空值,因此它们包含存储数组的内存位置中以前存在的值

要初始化,请使用以下命令

char *errors[10] = { 0 };
您也可以对memset执行相同的操作:


您没有显式地将数组中的值初始化为NULL,因此它们包含存储数组的内存位置中以前存在的值

要初始化,请使用以下命令

char *errors[10] = { 0 };
您也可以对memset执行相同的操作:


请为doMessages添加代码。您会遇到什么错误?另外,如何为doMessages函数中的每个字符串分配内存?我说你应该使用calloc函数来保证如果字符串没有填充,它将被初始化为0。请为doMessages添加代码。你会得到什么错误?另外,如何为doMessages函数中的每个字符串分配内存?我说您应该使用calloc函数来保证如果字符串没有填充,它将被初始化为0。这意味着您的doMessages没有正确初始化错误。请为此添加代码。@DanielRose,或仅将字符串分配给错误的某些元素。这意味着您的doMessages没有正确初始化错误。请为此添加代码。@DanielRose,或仅为某些错误元素分配字符串。