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