我的应用程序首先从conf文件中读取设置,然后可以从cli参数覆盖这些选项。在从conf加载设置之后,我需要检查是否设置了require值,但我仍然坚持要检查变量。
示例代码:
#include <stdio.h>
int main() {
const char* test;
if (test != NULL)
std::cout << test << "\n";
else
std::cout << "no value set\n";
return 0;
}
我做错了什么?
答案 0 :(得分:7)
您没有初始化test
。如果您希望它最初为NULL
,则必须进行设置:
const char* test = NULL;
答案 1 :(得分:0)
C和C ++不会自动将指针初始化为NULL。 如果你没有为它赋值,它仍然有一个值,它只是一个未知的,不确定的值。它可能是NULL,也可能是其他东西。
在示例代码中,test
有一个值,但它是未知的。
所以你的if语句可能是也可能不是。
答案 2 :(得分:0)
作为C ++更惯用的替代方法,您可以使用字符串并在初始化完成后检查它是否为空:
#include <string>
std::string test; // default constructor produces an empty string
// do the config load
if (test.empty())
{
// config error
}
请注意,如果此处的数据语义包含合法的空值,则此替代方法不可行。
答案 3 :(得分:0)
你没有。
如果您没有“定义”自己陈述的状态,则无法在C / C ++中检查“已定义”状态。如果您正在执行类似的操作,请不要将初始化保留到编译器实现中。
将指针初始化为NULL。