apue的错误处理函数是不是有问题

半个灵魂 2016-05-25 11:45:59
strcat(buf, "\n"); // 这个地方是不是存在越界 ???
/*
* Print a message and return to caller.
* Caller specifies "errnoflag".
*/
static void
err_doit(int errnoflag, int error, const char *fmt, va_list ap)
{
char buf[MAXLINE];

vsnprintf(buf, MAXLINE-1, fmt, ap);
if (errnoflag)
snprintf(buf+strlen(buf), MAXLINE-strlen(buf)-1, ": %s",
strerror(error));
strcat(buf, "\n"); // 这个地方是不是存在越界 ???
fflush(stdout); /* in case stdout and stderr are the same */
fputs(buf, stderr);
fflush(NULL); /* flushes all stdio output streams */
}
...全文
101 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-05-25
  • 打赏
  • 举报
回复
引用 4 楼 zhaom_916 的回复:
这个地方不用+2 +1就可以了吧 char buf[MAXLINE+2];//+2 for "\n" [quote=引用 3 楼 zhao4zhong1 的回复:] char buf[MAXLINE]; 应改为 char buf[MAXLINE+2];//+2 for "\n"
[/quote] 你是对的。我+2也不能说是错,可以说是“兼容”。
半个灵魂 2016-05-25
  • 打赏
  • 举报
回复
这个地方不用+2 +1就可以了吧 char buf[MAXLINE+2];//+2 for "\n"
引用 3 楼 zhao4zhong1 的回复:
char buf[MAXLINE]; 应改为 char buf[MAXLINE+2];//+2 for "\n"
赵4老师 2016-05-25
  • 打赏
  • 举报
回复
char buf[MAXLINE]; 应改为 char buf[MAXLINE+2];//+2 for "\n"
pengzhixi 2016-05-25
  • 打赏
  • 举报
回复
你要看上面两句最多写入了多少字符啊,然后留了多少字符空间出来
赵4老师 2016-05-25
  • 打赏
  • 举报
回复

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧