Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何检查变量是否有赋值_C - Fatal编程技术网

C 如何检查变量是否有赋值

C 如何检查变量是否有赋值,c,C,这是我的代码片段 main() { char *filename; if(1 > 2) { filename = "file.txt" } if(filename != NULL (also tried 0) { do something } return 0; } 我的问题是如何检查filename var是否有赋值。我可以使用strcmp,但右值可以不同于“file.txt”更改: cha

这是我的代码片段

main() {

    char *filename;

    if(1 > 2) {
      filename = "file.txt"
     }

     if(filename != NULL (also tried 0) {
       do something
     }
     return 0;
    }
我的问题是如何检查filename var是否有赋值。我可以使用strcmp,但右值可以不同于“file.txt”

更改:

char *filename;
致:

然后您的
NULL
测试将正常工作


不初始化此指针时,其值为未定义。这就是你的测试失败的原因。编译器假定您不关心它有什么值。

您必须自己初始化指针,否则它没有保证的起始值

char *filename = NULL;
无论何时声明(或定义)变量,都要将它们初始化为
0
NULL
(如果是指针),然后对照它们进行检查

比如说,

int i = 0;

.. 
if (!i) {

}
对于指针

int *p = NULL;

..
if (!p) {

}

始终初始化变量!(我读过代码,> No.<代码>),我读到一些地方,外部变量自动初始化为0。@ USE1074077:不是C或C++,而是java和许多其他语言。@ USE1074077:在<代码> C >代码中,静态变量是,我相信,但是始终这样做是好的实践。那么你就不必怀疑一个变量有什么值了。我们不能肯定地依赖“变量将自动分配给某某”,值得注意的是,这个分配之所以必要,是因为C在分配变量时不会在内存中存储任何值,除非你提供一个值。@maerics:我也这么想事情编辑。如果您使用的是GCC,启用
-Wuninitialized
选项进行编译将有助于发现这些问题。查阅
int *p = NULL;

..
if (!p) {

}