gpt4 book ai didi

c - 实现 perror() - 问题

转载 作者:太空狗 更新时间:2023-10-29 15:49:09 24 4
gpt4 key购买 nike

我正在实现与我正在使用的 API 等效的 perror()

perror() ISO C 标准 doc说:

The perror() function shall not change the orientation of the standard error stream.

但在编程方面,这意味着什么?

我目前正在使用 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 会使流变为面向字节的,而 wprintf 会使流变为面向宽的。

就您的问题而言,perror 不应改变其流的方向。

因此在您的代码中,如果 perror 使用的流已经有一个方向,您应该确保您没有调用一个方向与流的当前方向冲突的函数。

关于c - 实现 perror() - 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11484950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com