【发布时间】:2015-02-27 13:15:26
【问题描述】:
这段代码安全吗:
strerror_r(errcode,buffer,length);
printf("Error: %s",buffer);
也就是说,如果缓冲区太小,我是否可以相信缓冲区为空终止?从手册页:
兼容 XSI 的 strerror_r() 是可移植应用程序的首选。它在用户提供的长度为 buflen 的缓冲区 buf 中返回错误字符串。
GNU 特定 strerror_r() 返回一个指向包含错误消息的字符串的指针。这可能是指向函数存储在 buf 中的字符串的指针,也可能是指向某些(不可变的)静态字符串的指针(在这种情况下,buf 未被使用)。如果函数在 buf 中存储一个字符串,则最多存储 buflen 字节(如果 buflen 太小且 errnum 未知,则该字符串可能会被截断)。 字符串始终包含终止空字节 ('\0')。
如果我使用符合 XSI 的版本,可能会发生 buffer 不是 null 终止的情况。
【问题讨论】:
-
@yellowantphil RHEL 5.4 不相关,除非内核已升级到版本 2.6.36,gcc 到 4.8。