2016-03-31 78 views
-2

從.ini文件獲取字符串以便登錄無效。請不要建議這些階段或其中的任何一個。除非這不起作用。 B從.ini文件獲取字符串

char* pResult = new char[255]; 
GetPrivateProfileString("login", "uname", "", pResult, 255, "C:\\Program Files\\myfile\\login.ini"); 
if (pResult == "1"){ 
    g_pCVar->ConsoleColorPrintf(Color::Purple(), 
     "----Login-Succesfull----\n"); 

} 

else{ 
    g_pCVar->ConsoleColorPrintf(Color::Purple(), 
     "----Login-Failed----\n"); 

} 
delete[] pResult; 

這裏是.ini文件。

[login] 
uname=1 

有人可以請提出問題是什麼。難道是因爲我正在從程序文件中讀取數據嗎?當我從臨時閱讀時遇到問題?謝謝。

+0

什麼是'GetPrivateProfileString'? –

+0

@Mohit Jain:是不是從ini文件中讀取密鑰的標準windows函數之一? – DrDonut

+1

來自文檔*此功能僅用於與16位基於Windows的應用程序兼容。*使用其他方式訪問ini文件。你爲什麼不檢查返回值的錯誤? –

回答

6
if (pResult == "1") 

這是錯誤的,在這裏你比較指針,而不是這些指向的實際數據。你應該使用類似if (std::strcmp(pResult,"1") == 0)strcmp區分大小寫)

windows還有一個_stricmp(不區分大小寫)。

我記得在一天,我寫了一個小幫手像這樣的:

std::string get_profile_string(LPCSTR name, LPCSTR key, LPCSTR def, LPCSTR filename) 
{ 
    char temp[1024]; 
    int result = GetPrivateProfileString(name, key, def, temp, sizeof(temp), filename); 
    return std::string(temp, result); 
} 

如果小串的優化已啓用,它將被使用,如果result足夠小(所以沒有內存分配會發生) 。有1024個字符的限制,你可以增加,如果你需要的話。

std::string類超負荷等於==運營商,所以這次if (pResult == "1")將實際工作。

string result = get_profile_string("login", "uname", "", "C:\\Program Files\\myfile\\login.ini"); 

if (result == "1") 
    g_pCVar->ConsoleColorPrintf(Color::Purple(), "----Login-Succesfull----\n");  
else 
    g_pCVar->ConsoleColorPrintf(Color::Purple(),"----Login-Failed----\n"); 

但理想情況下,如果你只是想要一個整數,那麼你不應該使用GetPrivateProfileString可言。相反,使用GetPrivateProfileInt

int age = GetPrivateProfileInt("user", "age", 0, "C:\\Program Files\\myfile\\login.ini"); 

if (age >= 18) 
{ }  
else 
{ } 
+0

我懷疑有關Int的提示是有幫助的,因爲它看起來像他試圖爲登錄名捕獲一個用戶名,使用1的值作爲一個簡單的測試。 – kfsone

+0

@kfsone我的不好,我其實沒有讀取參數名稱。我已經更新了一些答案。 – Jts

+0

我使用int,它的工作安靜:)只是希望字符串會更容易使用,但我想我將不得不使用其中一個庫謝謝你 –