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