GetCurrentDirectory()打破了C++中的代码

Stu*_*ntX 0 c++ winapi

在下面的代码中,如果我注释掉对"GetCurrentDirectory"的调用,一切正常,但是如果我没有那么代码在它之后中断,没有子窗口出现,但程序不会崩溃.编译器不会给出任何错误.

 char *iniFilePath;
 int lenWritten = GetCurrentDirectory( MAX_PATH, iniFilePath );
 if( lenWritten )
 {
     lstrcat( iniFilePath, iniFileName.c_str() );
     char *buffer;
     GetPrivateProfileString( iniServerSectionName.c_str(), serverIp.c_str(), "", buffer, MAX_PATH, iniFilePath );// server ip
     MessageBox( 0, buffer, 0, 0 );
 }
 else
 {
     MessageBox( 0,0,0,0 );
 }
Run Code Online (Sandbox Code Playgroud)

hmj*_*mjd 8

iniFilePath是一个未初始化的指针,GetCurrentDirectory()它试图写入,导致未定义的行为.GetCurrentDirectory()没有为调用者分配缓冲区:必须提供它.

改成:

char iniFilePath[MAX_PATH]; // or similar.
Run Code Online (Sandbox Code Playgroud)

而不是使用lstrcat(),警告不要在其参考页面上使用消息,构造路径使用a std::string来避免潜在的缓冲区溢出:

const std::string full_file_path(std::string(iniFilePath) + "/" + iniFileName);
Run Code Online (Sandbox Code Playgroud)

请注意Wimmelbuffer指出的类似问题.