我正在实现与我正在使用的 API 等效的 perror()
。
perror() ISO C std doc
说:
但以编程方式,这意味着什么?
我目前正在使用 fprintf(stderr, .. )
。使用它是错误的吗?如果是真的,为什么?如果我的实现中有一些错误(见下文),请给我点数。
根据我的解释查看我的 C 代码:
void
fooapi_perror(const char *s)
{
char *emsg;
if(s != NULL && *s != '\0')
fprintf(stderr, "%s: ", s);
emsg = fooapi_strerror(GetLastErrorCode());
fprintf(stderr, "%s\n", emsg);
free(emsg);
}
最佳答案
每个 C 流都有一个属性——“方向”,要么是“面向宽的”,要么是“面向字节的”,这由对这个流的第一个操作决定。当流没有“方向”时,您可以改变流的方向。调用方向与流方向冲突的任何函数都会导致未定义的行为。
例如, printf 将使 Steam 成为面向字节的,而 wprintf 使 Steam 成为面向宽的。
就您的问题而言, perror 不应改变其流的方向。
所以在你的代码中,如果 perror 使用的流已经有一个方向,你应该确保你没有调用一个方向与流的当前方向冲突的函数。
关于c - 实现 perror() - 问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11484950/