我有一个我没有初始化的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
。
答案 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>;
}