在 C++ 中设置控制台窗口标题时遇到问题

Posted

技术标签:

【中文标题】在 C++ 中设置控制台窗口标题时遇到问题【英文标题】:Trouble setting console window title in C++ 【发布时间】:2020-11-03 18:29:47 【问题描述】:

我一直在尝试学习如何使用 Windows API 制作 C++ 应用程序。我尝试使用一个简单的函数SetConsoleTitle() 来设置控制台窗口的标题。这是我的程序:

#include <iostream>
#include <tchar.h>
#include <windows.h>

int main()
    TCHAR abc[5];
    abc[0] = 'H';
    abc[1] = 'E';
    abc[2] = 'L';
    abc[3] = 'L';
    abc[4] = 'O';
    SetConsoleTitle(abc);
    std::cout << "Hello World\n";
    system("pause > nul");

这就是结果

标题应该是"HELLO"。其他角色在那里做什么,我该如何摆脱他们?

我使用 Visual Studio Code 2019 编译了这段代码。

【问题讨论】:

你需要空终止你的字符串 在旁注中,你真的不应该在这个例子中使用TCHAR。它在现代代码中没有位置,此外,如果您将项目设置为 Unicode,那么此代码将无法按原样正确编译,因为您没有使用 TEXT() 宏作为字符文字,例如:abc[0] = TEXT('H'); ... 您应该去掉#include &lt;tchar.h&gt;,把TCHAR改成char,把SetConsoleTitle改成SetConsoleTitleA。或者更好的是,改用wchar_tSetConsoleTitleW @RemyLebeau 对于 ASCII 字符,不需要 TEXT 宏,因为 char 将向上转换为 wchar_t 就好了。只有 U+007f 以外的字符或实际字符串需要宏。即使这样也已经过时了,因为您可能只需将 L 添加到所有内容之前。 【参考方案1】:

正如@AlanBirtles 所说,您需要空终止您的字符串。这是 C++ 知道字符串有多长的唯一方法。有三种方法可以做到这一点:

TCHAR abc[6]; // <-- increase this size
...
abc[5] = '\0'; // <-- add this
TCHAR abc[] = "HELLO";  // the terminator will be added automatically
TCHAR abc[6] = 0;  // the string will consist of all nulls and you can then overwrite just the first 5

【讨论】:

以上是关于在 C++ 中设置控制台窗口标题时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

在 QNetworkRequest 中设置标头时遇到问题

在 Sublime Text2 中设置 Python 版本时遇到问题

在 Core Data 中设置数字属性时遇到问题

在打包器json文件中设置thoughput时遇到以下问题,需要帮助来解决这个问题

在 node.js 中设置我的 babel-watch 时遇到问题

在 typescript / angular2 环境和后端的 nodejs 中设置持久会话时遇到问题