【问题标题】:Can anyone explain why statements after a cout would change the output?谁能解释为什么 cout 之后的语句会改变输出?
【发布时间】:2013-08-30 18:26:36
【问题描述】:

最奇怪的事情正在发生。在下面的程序中,我打印出一行。照原样,程序输出以下内容:

-----FOCUS-----:0x22fc80:

但是,如果我在 cout 之后注释掉 7 个语句中的任何一个,我会得到以下信息:

-----FOCUS-----:0:

我已包含 tchar.h、windows.h、iostream 和 Psapi.h。我使用的是MinGW-64,编译命令是:

"C:\MinGW64\bin\g++.exe" -o MyProgram.exe MyProgram.cpp -lpsapi

程序是:

int main()
{
    HWND focusThreadWnd = GetForegroundWindow();
    DWORD focusThreadID = GetWindowThreadProcessId(focusThreadWnd,0);
    GUITHREADINFO focusThreadInfo;
    GetGUIThreadInfo(focusThreadID, &focusThreadInfo);
    HWND focus = focusThreadInfo.hwndFocus;
    cout << "-----FOCUS-----:" << focus << ":" << endl;

    HWND k1Focus = focusThreadWnd;
    HWND k2Focus = focusThreadWnd;
    HWND k3Focus = focusThreadWnd;
    HWND k4Focus = focusThreadWnd;
    HWND k5Focus = focusThreadWnd;
    HWND k6Focus = focusThreadWnd;
    HWND k7Focus = focusThreadWnd;
}

所以我的问题是,cout 之后的命令如何影响输出?而且,为什么这七个命令中的存储会改变输出?而且,7 有什么特别之处?

【问题讨论】:

  • 如果在最后 7 行之前刷新输出流怎么办?
  • @SargeBorsch: std::endl 刷新流。

标签: windows cout


【解决方案1】:

我没有重现您的问题,但根据 GetGUIThreadInfo 的 MSDN 页面

Note that you must set the cbSize member to sizeof(GUITHREADINFO) before calling this function.

那些额外的 7 个 HWND 影响了您的堆栈帧,导致 cbSize 被不同的值填充

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2017-03-25
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多