c – 实现perror() – 问题

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

perror()ISO C std 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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...