我正在尝试将计算机名称存储在名为computerName的字符串中。运行gethostname()时,程序退出并显示退出状态-1。我正在尝试弄清楚该如何处理。有没有办法防止程序完全退出,有没有办法找出问题所在。 gethostname()上的文档说它的错误是EFAULT,EINVAL,ENAMETOOLONG和EPERM。我不确定如何抓到其中任何一个。
问题不只是为什么会发生错误,而是如何处理。
发生错误的原因是因为我在具有明显限制的联机ide上运行代码,并且在其他计算机上未发生此错误。我已经尝试在try and catch(...)语句中包含代码,但它仍显示exit_status -1。
void GetComputerName()
{
char hostname[1024];
gethostname(hostname, 1024);
computerName = hostname;
}
//and then outputting
std::cout << computerName << std::endl;
预期结果 Linux-1994 //或任何计算机名称
答案 0 :(得分:1)
您可以通过名为 errno 的全局变量了解这些错误。
由于错误是定义为宏的常量,因此您可以执行以下操作:
if(errno == EFAULT) printf("Specific error!")
答案 1 :(得分:0)
在hostname
不成功的情况下,您可以简单地为gethostname()
添加一个默认值:
char hostname[1024] = "unknown";
gethostname(hostname, 1024);
但是,这可能无法解决您的特定问题。
运行
gethostname()
时,程序退出并显示退出状态-1
这不是正常行为。失败时,gethostname()
返回一个非零代码并设置errno
,但是程序继续执行。
您的运行时环境可能会杀死所有调用gethostname()
的应用程序。除了不调用gethostname()
或切换到另一个可以运行的在线IDE(live example)之外,您无能为力。