如何在C中检测未初始化的字符串

时间:2012-05-26 15:33:48

标签: c arrays string

我有一个我没有初始化的char x[16],我需要测试是否将某些内容分配给x,或者它是如何在运行时创建的。我该怎么做?谢谢

示例代码

int main(int argc, char** argv) {
char x[16];

 //<other part of the code>
if(x is an empty char array (not assigned anything) then skip the next line) {
 //blank
}else {
//<rest of the code>
}
return 0;}

PS:我尝试了memchar(x, '\0', strlen(x))if(x[0] == '\0')if(!x[0]),但它不能正常工作,因为默认情况下char数组不包含\0

2 个答案:

答案 0 :(得分:3)

你必须像这样初始化它:

char x[16] = { 0 }; // note the use of the initializer, it sets the first character to 0, which is all we need to test for initialization.

if (x[0] == 0)
  // x is uninitialized.
else
  // x has been initialized

另一种替代方案(如果可用于您的平台)是alloca,它在堆栈上为您分配数据。你会像这样使用它:

char *x = NULL;

if (x == NULL)
    x = alloca(16);
else 
    // x is initialized already.

由于alloca在堆栈上分配,因此您无需free分配的数据,从而明显优于malloc

答案 1 :(得分:1)

初始化变量是一种很好的做法,你可以使用编译器在它们不是时发出警告。使用gcc,您将使用-Wuninitialized标志。

您可以通过更改像

这样的字符数组变量在编译时初始化数组

char x[16] = {0};

然后测试看

if ('\0' != x[0])
{
   <do something>; 
}
else
{  
   <initialize character string>;
}