1. 程式人生 > >從一段代碼談GetPrivateProfileString的深坑

從一段代碼談GetPrivateProfileString的深坑

WinAPI ini讀取

**總結:GetPrivateProfileString註意文件是否存在,

文件不存在或不具有r讀權限會在運行時報內存錯誤。**

失敗源代碼如下:

string programDir = GetOcxPath(file);//得到ini配置文件路徑

ret = GetPrivateProfileString(app,key,"",returnString,MAX_PATH,"c:\\base64bmp_config.ini");

這段代碼看起來沒任何問題,在MFC ocx工程下編譯鏈接都ok,但運行一直內存錯誤。

一直以為是ocx註冊沒有替換,或者是GetOcxPath存在內存錯誤,將GetOcxPath單元測試和斷點調試沒有任何問題。

最後增加了文件存在判斷,不存在就讀取默認文件就OK了。

改進後源代碼如下:

    string programDir = GetOcxPath(file);//得到ini配置文件路徑
    DWORD ret;
    FILE* fp = fopen(programDir.data(),"r");
    if(!fp){
        ret = GetPrivateProfileString(app,key,"",returnString,MAX_PATH,"c:\\base64bmp_config.ini");
    }else{
        ret = GetPrivateProfileString(app,key,"",returnString,MAX_PATH,programDir.data());
    }

從一段代碼談GetPrivateProfileString的深坑