【问题标题】:Redefining a predefined errno error message (E2BIG)重新定义预定义的 errno 错误消息 (E2BIG)
【发布时间】:2020-02-03 18:17:49
【问题描述】:

有没有办法重新定义errno 错误消息?例如,我正在使用E2BIG,我想更改它在遇到错误时显示的错误消息。

这些消息存储为int,所以当我重新定义它时,只会让我更改它的整数值,这不是很有用。我想更改消息本身。

#include <string>
#include <iostream>
#include <vector>

int main() 
{
   const std::size_t BUF_SIZE = 256;
   std::vector<char> buffer(BUF_SIZE);
   int errNum = E2BIG;

   auto strerror = strerror_s(buffer.data(), buffer.size(), errNum);

   std::cout << buffer.data();
}

当前的错误信息是:

参数列表太长

但我正试图改变它来表达一些不同的东西。有没有办法做到这一点?

【问题讨论】:

    标签: c++ errno strerror


    【解决方案1】:

    您需要编写一个包装函数来填写您需要的任何自定义错误消息。例如:

    errno_t my_strerror_s(char *buffer, size_t numberOfElements, int errnum)
    {
        if (errnum==E2BIG) {
            const char *msg = "my custom error";
            if (numberOfElements < strlen(msg)+1) {
                return -1;
            else {
                strcpy(buffer, msg);
                return 0;
            }
        } else {
            return strerror_s(buffer, numberOfElements, errnum);
        }
    }
    

    【讨论】:

    • 这是一个很好的方法。如果我在任何情况下都需要将 E2BIG 传递给另一个调用 strerror_s 的函数(一个无法更改的函数),那么 E2BIG 消息本身将需要是自定义错误消息。你知道是否可以重新定义 E2BIG 本身的信息吗?
    • @BrentMB 这是不可能的。
    猜你喜欢
    • 2023-03-10
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 2015-09-21
    • 2011-04-27
    相关资源
    最近更新 更多