2

我有一个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

4

2 回答 2

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

于 2012-05-26T15:35:30.347 回答
1

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

您可以通过像这样更改字符数组变量来在编译时初始化数组

char x[16] = {0};

然后测试看看

if ('\0' != x[0])
{
   <do something>; 
}
else
{  
   <initialize character string>;
}
于 2012-05-26T15:44:50.107 回答