我正在浏览C99标准,寻找我现在不记得的东西,当我注意到从strerror()函数返回的指针(第7.12.6.2节)不符合const-限定时,尽管标准说:
strerror函数返回一个指向字符串的指针,其内容为
特定地点。指向的数组不应由程序修改,
但可能会被随后对strerror函数的调用覆盖。
此函数是否有明显的理由返回可修改的字符串,而不是如下所示:
char const * const strerror(int errnum); 或者至少
char const * strerror(int errnum);发布于 2010-06-22 19:06:49
与字符串文本的类型相同:它已经与C89中的字符串类型一样,描述了在语言中引入const之前的一种实践。更改它将使当前有效程序无效。
发布于 2010-06-26 07:48:57
有关静态缓冲区的响应是错误的;返回的指针类型是否为const与缓冲区无关。返回类型完全是关于API与不使用const的历史代码的兼容性,并且没有什么坏处。编写现代const感知代码的人只需立即使用返回值,或者将其存储到指针到const变量中。
发布于 2010-06-22 19:05:28
这可能是因为许多历史实现使用静态缓冲区“打印”错误字符串。
https://stackoverflow.com/questions/3096237
复制相似问题