可变大小的对象可能无法用char * ptr[buflen]初始化



是的,我读了这两篇文章。

C编译错误:"可变大小的对象可能未初始化"C错误&;可变大小的对象可能无法初始化&;

我的情况有点不同,因为我使用的是char * ptr[buflen]。这是我尝试过的:

char  *ptr[buflen] = {0};  //This gave me the variable sized object error. 
char  *ptr[buflen];
memset( ptr, 0, buflen*buflen*sizeof(char)); //I figured this would work with looking at the previous examples. 
//This seemed to work but I am curious if I need to use free or malloc
after looking at the previous examples. I don't want this to seg fault later
in the program and have no clue what is causing it. 
char  *ptr[buflen]; 
memset(ptr, 0, sizeof ptr);
char *strings_line_tokens[503] = {0}; //Why does this work but the above won't work? 

我的情况有点不同,因为我使用char * ptr[buflen]。

没有。你将ptr声明为char *buflen大小的数组。如果buflen不是常量表达式,则ptr是一个变长数组,并且不能为变长数组使用初始化式:

< 6.7.9初始化/strong>

…要初始化的实体类型应为未知大小的数组或完整数组非变长数组类型
的对象类型

重点补充道。

所以,很简单,

char *ptr[buflen] = {0};

不是合法的初始化。

如果你想将ptr的所有元素初始化为0NULL,你可以使用memset:

memset( ptr, 0, sizeof *ptr * buflen ); // note memset writes 0 to all *bytes* in 
                                        // in the array 

或者给循环中的每个元素赋值

for ( size_t i; i < buflen; i++ )
  ptr[i] = NULL; // or 0, or some other pointer value

最新更新