2010-12-02 84 views
3

我的应用程序首先从conf文件中读取设置,然后可以从cli参数中覆盖这些选项。从conf加载设置后,我需要检查是否设置了要求值,但我坚持让它检查变量。如何检查const char *的值是否被定义?

示例代码:

#include <stdio.h> 

int main() { 

const char* test; 

if (test != NULL) 
    std::cout << test << "\n"; 
else 
    std::cout << "no value set\n"; 

return 0; 
} 

我做了什么错?

+4

什么是具体问题?怎么了? *应该发生什么? (你没有初始化`test`。) – Flinsch 2010-12-02 17:50:36

+0

也重新标记为c。尽管这里有C++特定的东西(只有流,真的),但问题(和答案)是面向C的。 – haylem 2010-12-02 18:33:32

回答

7

您没有初始化test。如果你希望它是NULL首先,你必须将其设置:

const char* test = NULL; 
+0

但是,如果我将它初始化为NULL,那不代表我以后将无法更改其值(因为它是const char *)? – codefrog 2010-12-02 17:53:29

0

C和C++不初始化指针自动NULL。 如果你没有给它赋值,它仍然有一个值,它只是一个未知的,不确定的值。它可能是NULL,它可能是别的。

在您的示例代码中,test有一个值,但它是未知的。 所以你的if语句可能会也可能不会是真的。

0

至于这是C++更地道的替代,你可以使用一个字符串,并检查您的初始化完成后,无论是空的:

#include <string> 

std::string test; // default constructor produces an empty string 

// do the config load 

if (test.empty()) 
{ 
    // config error 
} 

注意,如果数据语义这里包含空值是合法的,这个选择是不可行的。

0

你不知道。

如果您没有“定义”您自己的状态,那么您无法在C/C++中检查“已定义”状态。如果你正在做这样的事情,不要将初始化留给你的编译器实现。

将指针初始化为NULL。