0

我的源代码如下:

#include <QtCore/QCoreApplication>
#include <stdio.h>
#include <errno.h>



using namespace std;
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    printf("salam\n");
    int num = 10;
    int ss;
    ss = num / 0;
    printf("%s\n",strerror(errno));

    return a.exec();

}

我想显示我的error字符串“除零”!但输出是:

salam没有这样的文件或目录

请帮助我如何在c++中使用errnoand ?errorstring

4

2 回答 2

2

不幸的是,整数除以零是C++ 中未定义的行为。所以运行时可以做任何事情。你已经失去了对程序的控制,所以没有什么可以帮助你。

您最好的选择是首先检查分母并明确处理零情况:程序失败返回非零是惯用的。

于 2015-03-05T11:57:11.773 回答
2

除以零只是Undefined Behavior。该语言希望您不要编写这样无意义的代码(如果您这样做,就会鄙视您)。从本质上讲,它使您的整个程序变得毫无意义,并且任何事情都可能发生。如果有可能为零,您需要在除法之前检查分母。

C 和 C++ 中存在未定义行为的主要原因是效率。硬件不想检查这种没有数学意义的特殊情况,语言也不想在每次调用中都添加检查。这些语言被设计为在“好”的情况下运行得非常快。

errno仅在使用标准库(和系统调用)时为某些错误设置。例如:

double not_a_number = std::log(-1.0);
std::cerr << std::strerror(errno) << '\n';
于 2015-03-05T11:58:45.330 回答