如何检查是否定义了const char *的值?

时间:2010-12-02 17:47:46

标签: c++ c

我的应用程序首先从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;
}

我做错了什么?

4 个答案:

答案 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。