实现perror() - 问题

Jac*_*ack 3 c posix

我正在实现perror()相当于我正在使用的API.

perror()ISO C标准doc说:

perror()函数不得更改标准错误流的方向.

但以编程方式,它意味着什么?

我现在正在使用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);
}
Run Code Online (Sandbox Code Playgroud)

Der*_* Si 9

每个C流都有一个属性 - "方向"或"面向宽"或"面向字节",这是由对该蒸汽的第一次操作决定的.当流没有"方向"时,可以改变蒸汽的方向.调用任何方向与流方向冲突的函数会导致未定义的行为.

例如,printf将使蒸汽变为字节导向,而wprintf导致蒸汽变为宽向.

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

所以在你的代码中,如果perror使用的流已经有了一个方向,你应该确保你没有调用一个方向与流的当前方向冲突的函数.