C++ Can';t在C+中输出整个流+;

C++ Can';t在C+中输出整个流+;,c++,C++,我将创建的程序将获取UNIX/Linux系统上当前登录的用户名,并显示欢迎消息。代码blow所做的只是执行以下操作: Welcome user@hostname:~/Dev/cpp$ 流的其余部分不会输出。我需要做什么才能输出它的其余部分?我应该使用其他函数而不是这个函数吗?我甚至不确定是否应该为此使用getenv() 我想我可以使用regex或其他东西只获取用户名,但这并不能解决问题,尽管流的其余部分不会被输出 #include <iostream> #include <s

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

Welcome user@hostname:~/Dev/cpp$
流的其余部分不会输出。我需要做什么才能输出它的其余部分?我应该使用其他函数而不是这个函数吗?我甚至不确定是否应该为此使用getenv()

我想我可以使用regex或其他东西只获取用户名,但这并不能解决问题,尽管流的其余部分不会被输出

#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;
}
#包括
#包括
int main(){

std::cout唯一可能的原因是执行程序时环境变量
USERNAME
不存在。
getenv
函数返回
nullptr
(如@5gon12eder所建议)您可以通过在输出流中注入
nullptr
来调用未定义的行为。在您的示例中,它只是在我自己的示例中结束输出(就像在字符串中插入null一样),如果引发SIGSEGV

您应该确保环境变量存在:

int main() {
     const char *name = getenv("USERNAME");
     if (name == std::nullptr) { name = "unknown guest"; }
     std::cout << "Welcome " << name << " to APP_NAME. To get     available commands use --help" << std::endl;
     return 0;
}
intmain(){
const char*name=getenv(“用户名”);
如果(name==std::nullptr){name=“未知来宾”;}

std::cout唯一可能的原因是执行程序时环境变量
USERNAME
不存在。
getenv
函数返回
nullptr
(如@5gon12eder所建议)您可以通过在输出流中注入
nullptr
来调用未定义的行为。在您的示例中,它只是在我自己的示例中结束输出(就像在字符串中插入null一样),如果引发SIGSEGV

您应该确保环境变量存在:

int main() {
     const char *name = getenv("USERNAME");
     if (name == std::nullptr) { name = "unknown guest"; }
     std::cout << "Welcome " << name << " to APP_NAME. To get     available commands use --help" << std::endl;
     return 0;
}
intmain(){
const char*name=getenv(“用户名”);
如果(name==std::nullptr){name=“未知来宾”;}

std::cout问题在于,您在未设置
用户名
变量的环境中执行程序(这一点我并不感到惊讶)因此,
return
s a
nullptr
并将此未经检查的数据流传送到
std::cout
会给出未定义的行为,在您的情况下,该行为会碰巧截断流。
user@hostname:~/Dev/cpp$
您看到的不是由您的程序生成的,而是由您的普通shell提示符生成的,因为程序突然结束,没有输出最后的新行

在使用之前,您应该测试
返回值

#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";
}
#包括
#包括
int
main()
{
if(const auto user=std::getenv(“用户名”))

std::cout问题在于,您在未设置
用户名
变量的环境中执行程序(这一点我并不感到惊讶)因此,
return
s a
nullptr
并将此未经检查的数据流传送到
std::cout
会给出未定义的行为,在您的情况下,该行为会碰巧截断流。
user@hostname:~/Dev/cpp$
您看到的不是由您的程序生成的,而是由您的普通shell提示符生成的,因为程序突然结束,没有输出最后的新行

在使用之前,您应该测试
返回值

#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";
}
#包括
#包括
int
main()
{
if(const auto user=std::getenv(“用户名”))

std::cout“流的其余部分没有输出”是什么意思?它工作正常。我被这个输出搞糊涂了。
USERNAME
不是一个标准的环境变量。
USER
应该包含当前用户的名称,但即使这是可选的。我怀疑
getenv
为您提供了一个
nullptr
并且您正在调用未定义的行为。检查
返回值
>值。该
USERNAME
环境变量包含哪些内容?@πάνταῥεῖ 好的,这很奇怪。当我编译它并运行程序时,我只输出到getenv()函数,而不是它后面的另一个字符串。@5gon12eder aah,你说得对。当我只使用USER而不是USERNAME时,整个流工作得非常好。谢谢!你说“流的其余部分没有输出”是什么意思?它工作正常。我被这个输出搞糊涂了。
USERNAME
不是一个标准的环境变量。
USER
应该包含当前用户的名称,但即使这是可选的。我怀疑
getenv
为您提供了一个
nullptr
并且您正在调用未定义的行为。检查
返回值
>值。该
USERNAME
环境变量包含哪些内容?@πάνταῥεῖ 好的,这很奇怪。当我编译它并运行程序时,我只输出到getenv()函数,而不是它后面的另一个字符串。@5gon12eder aah,你说得对。当我只使用USER而不是USERNAME时,整个流可以完美地工作。谢谢!