在下面的代码中,如果我注释掉对“ 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 );
 }

最佳答案

iniFilePathGetCurrentDirectory()试图写入的未初始化指针,导致未定义的行为。 GetCurrentDirectory()不会为调用方分配缓冲区:必须提供它。

改成:

char iniFilePath[MAX_PATH]; // or similar.


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

const std::string full_file_path(std::string(iniFilePath) + "/" + iniFileName);


注意Wimmel指出的与buffer类似的问题。

关于c++ - GetCurrentDirectory()破坏了C++中的代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13668447/

10-09 07:14