为什么我的输出损坏了?
Why is my output corrupted?
我正在使用以下函数 return 当前安装的内存量:
const char* Aries::Memory::GetInstalledMemory() {
MEMORYSTATUSEX statex;
statex.dwLength = sizeof(statex);
GlobalMemoryStatusEx(&statex);
std::stringstream ss;
ss << statex.ullTotalPhys / (1024 * 1024 * 1024);
return ss.str().c_str();
}
我将它与另一个stringstream
结合使用并将其输出到屏幕:
CryLogAlways("[Aries | System] Probe system.");
Aries::Memory *pMem = new Aries::Memory();
stringstream ss;
ss << "[Aries | System] Result of probe: installed memory is ";
ss << pMem->GetInstalledMemory();
ss << "GB.";
预期输出为:
[Aries | System] Result of probe: installed memory is 32.00GB.
我得到的输出是:
Ö
同时,如果我调整函数使其 return 成为 DOUBLE
,它工作正常:
DOUBLE Aries::Memory::GetInstalledMemory() {
MEMORYSTATUSEX statex;
statex.dwLength = sizeof(statex);
GlobalMemoryStatusEx(&statex);
return statex.ullTotalPhys / (1024 * 1024 * 1024);
}
这似乎是在 GetInstalledMemory()
函数中使用 ostringstream
进行转换时出现的一些错误。但是我需要 return 一个 const char *
.
GetInstalledMemory
的输出似乎破坏了使用它的整个 stringstream
;这是哪里出了问题,我该如何解决?
ss.str()
return 是一个 std::string
对象,但在您的代码中,它只会在那一行代码中作为临时对象存在。然后你调用 c_str()
它给出了一个指向该临时字符串拥有的内存的指针。但是一旦你的函数 returns 内存就变得无效,因为临时文件被销毁了。
一个好的解决方案是将 GetInstalledMemory
更改为 return 一个 std::string
对象而不是字符指针。然后它可以 return ss.str();
并且字符串对象将处理所有事情。
我正在使用以下函数 return 当前安装的内存量:
const char* Aries::Memory::GetInstalledMemory() {
MEMORYSTATUSEX statex;
statex.dwLength = sizeof(statex);
GlobalMemoryStatusEx(&statex);
std::stringstream ss;
ss << statex.ullTotalPhys / (1024 * 1024 * 1024);
return ss.str().c_str();
}
我将它与另一个stringstream
结合使用并将其输出到屏幕:
CryLogAlways("[Aries | System] Probe system.");
Aries::Memory *pMem = new Aries::Memory();
stringstream ss;
ss << "[Aries | System] Result of probe: installed memory is ";
ss << pMem->GetInstalledMemory();
ss << "GB.";
预期输出为:
[Aries | System] Result of probe: installed memory is 32.00GB.
我得到的输出是:
Ö
同时,如果我调整函数使其 return 成为 DOUBLE
,它工作正常:
DOUBLE Aries::Memory::GetInstalledMemory() {
MEMORYSTATUSEX statex;
statex.dwLength = sizeof(statex);
GlobalMemoryStatusEx(&statex);
return statex.ullTotalPhys / (1024 * 1024 * 1024);
}
这似乎是在 GetInstalledMemory()
函数中使用 ostringstream
进行转换时出现的一些错误。但是我需要 return 一个 const char *
.
GetInstalledMemory
的输出似乎破坏了使用它的整个 stringstream
;这是哪里出了问题,我该如何解决?
ss.str()
return 是一个 std::string
对象,但在您的代码中,它只会在那一行代码中作为临时对象存在。然后你调用 c_str()
它给出了一个指向该临时字符串拥有的内存的指针。但是一旦你的函数 returns 内存就变得无效,因为临时文件被销毁了。
一个好的解决方案是将 GetInstalledMemory
更改为 return 一个 std::string
对象而不是字符指针。然后它可以 return ss.str();
并且字符串对象将处理所有事情。