重新定义预定义的 errno 错误消息 (E2BIG)

Redefining a predefined errno error message (E2BIG)

有没有办法重新定义 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();
}

当前的错误信息是:

Arg list too long

但我正在尝试对其进行更改以表达一些不同的内容。有办法吗?

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

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);
    }
}