2012-01-09 46 views
-2

这里是我的代码片段如何检查是否变量已分配值

main() { 

    char *filename; 

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

    if(filename != NULL (also tried 0) { 
     do something 
    } 
    return 0; 
    } 

我的问题是如何检查文件名变种已分配的值。我可以使用STRCMP但右值可以是 “file.txt的”

+1

总是初始化变量! (指向NULL的指针) – 2012-01-09 17:59:48

+0

我已经读过extern变量被自动初始化为0的地方。 – summerc 2012-01-09 18:03:25

+0

@ user1074077:不是在C或C++中,而是在Java和许多其他语言中。 – maerics 2012-01-09 18:05:34

回答

8

不同的变化:

char *filename; 

要:

char *filename = NULL; 

然后你NULL测试将正常工作。

当您未初始化此指针时,其值为undefined。这就是为什么你的测试失败了。编译器认为你不在乎它有什么价值。

+1

值得注意的是,这个赋值的必要性是因为除非你提供一个值,否则C不会在变量的内存中存储任何值。 – maerics 2012-01-09 18:01:11

+0

@maerics:我只是在想同样的事情。编辑。 – 2012-01-09 18:04:02

+1

如果您使用GCC,使用启用'-Wuninitialized'选项编译将有助于解决这些问题。参看http://www.delorie.com/gnu/docs/gcc/gcc_8.html – 2012-01-09 18:27:00

0

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

char *filename = NULL; 
0

每当声明(或定义)一个变量,它们初始化为0NULL(如果指针),然后检查对他们!

例如,

int i = 0; 

.. 
if (!i) { 

} 

为指针,

int *p = NULL; 

.. 
if (!p) { 

}