2016-03-31 23 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:標準ウィンドウの1つでは、iniファイルからキーを読み取る機能はありませんか? – DrDonut

+1

docsから*この関数は、16ビットのWindowsベースのアプリケーションとの互換性のためにのみ提供されています。* iniファイルにアクセスするには別の方法を使用してください。エラーの戻り値をチェックしていないのはなぜですか? –

答えて

6
if (pResult == "1") 

これは、ここにあなたがポインタではなく、それらが指す実際のデータを比較し、間違っています。あなたは_stricmp(大文字と小文字を区別しませんが)もありますwindowsif (std::strcmp(pResult,"1") == 0)のようなもの(strcmpは大文字と小文字が区別されます)

を使用する必要があります。

私は戻って、私はこのような小さなヘルパーを書いた日に覚え

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

簡単なテストとして1という値を使用してログイン用のユーザー名を取得しようとしているように、Intについてのヒントは役に立ちます。 – kfsone

+0

@kfsone私の悪い、私は実際にパラメータ名を読んでいない。私は少し私の答えを更新しました。 – Jts

+0

私はintを使用していますし、静かに働いています:)ただ文字列が使いやすくなるだろうが、私はそれらのライブラリの1つを使用しなければならないと思います。 –

関連する問題