2010-12-02 58 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。

相關問題