给出以下示例 C 代码片段测试用例;
#include <stdio.h>
#include <windows.h>
#define SMALL_BUFFER 256
int main()
{
char* cErrorMessage = malloc(sizeof(char) * SMALL_BUFFER);
if (cErrorMessage == NULL)
{
fprintf(stderr, "Insufficient memory available\n");
return 1;
}
else
{
strerror_s(cErrorMessage, SMALL_BUFFER, ERROR_NOT_ENOUGH_MEMORY);
fprintf(stderr, "%s\n", cErrorMessage);
}
free(cErrorMessage);
return 0;
}
为什么错误代码为 ERROR_NOT_ENOUGH_MEMORY 的 strerror_s() 会返回“Exec format error”消息?
我尝试了什么?我已通读 strerror_s 和 System Error Codes 的文档,尝试找出代码下面发生的情况。
我在期待什么?我期望看到一条错误消息“没有足够的内存资源可用于处理此命令”。
宏
ERROR_NOT_ENOUGH_MEMORY
是 Windows 特定的错误代码,通常由 GetLastError()
返回,而 strerror
(和 strerror_s
) 处理来自 errno
的标准 C 错误代码(以及在 POSIX 系统上)像 Linux 或 macOS 也是获取错误代码的标准方式)。
FormatMessage
:
char *cErrorMessage = NULL;
FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
ERROR_NOT_ENOUGH_MEMORY,
0,
(LPCSTR) &cErrorMessage,
0,
0);
fprintf(stderr, "%s\n", cErrorMessage);
LocalFree((HLOCAL) cErrorMessage);