gpt4 book ai didi

c++ - 无法在 C++ 中输出整个流

转载 作者:行者123 更新时间:2023-11-28 00:03:43 24 4
gpt4 key购买 nike

我将要创建的程序将获取当前在 UNIX/Linux 系统上登录的用户名并显示欢迎消息。代码 blow 所做的只是执行此操作:

Welcome user@hostname:~/Dev/cpp$

流的其余部分不输出。我需要做什么才能输出其余部分?我应该使用其他功能而不是这个功能吗?我不确定是否应该为此使用 getenv()。

我想我可以使用正则表达式或其他东西来只获取用户名,但这并不能解决问题,尽管无论如何都不会输出流的其余部分。

#include <iostream>
#include <stdlib.h>

int main() {
std::cout << "Welcome " << getenv("USERNAME") << " to APP_NAME. To get available commands use --help" << std::endl;
return 0;
}

最佳答案

问题是您在 USERNAME 所在的环境中执行程序未设置变量(这并不让我感到惊讶)。因此 std::getenv return一个nullptr并将未经检查的流式传输到 std::cout给出未定义的行为,在您的情况下,恰好截断了流。 user@hostname:~/Dev/cpp$你看到的不是由你的程序产生的,而是你的普通 shell 提示符,它以一个有趣的位置结束,因为程序突然结束而没有输出最后的换行符。

你应该测试 return使用前的值。

#include <cstdlib>
#include <iostream>

int
main()
{
if (const auto user = std::getenv("USERNAME"))
std::cout << "Hello, " << user << "\n";
else
std::cout << "Hello, whoever you may be.\n";
}

无论如何,这不是您获取当前登录用户的用户名的方式。如果你想使用环境(这是不可靠的)你应该使用 USER变量代替。一个可能更强大的解决方案是使用 getlogin 由 POSIX 指定并通过 <unistd.h> 提供的函数.注意 getlogin也可能会失败 ( return a nullptr ) 所以你仍然应该有一个备份策略。

关于c++ - 无法在 C++ 中输出整个流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36967363/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com