为什么strerror不返回const限定指针?

时间:2010-06-22 18:56:04

标签: c string standards

我只是略读C99标准,寻找我现在不记得的东西,当我注意到从strerror函数返回的指针(第7.12.6.2节)不是const限定的,即使标准说:

  

strerror函数返回指向字符串的指针,其内容为
  特定于语言环境。 指向的数组不得被程序修改
  但可能会被后续调用strerror函数覆盖。

这个函数有一个明显的原因是返回一个可修改的字符串而不是像:

char const * const strerror(int errnum);  

或至少

char const * strerror(int errnum);

感谢。

3 个答案:

答案 0 :(得分:5)

与字符串文字的类型相同:它在C89中就像那样,描述了在语言中引入const之前的习惯。更改它会使当前有效的程序无效。

答案 1 :(得分:1)

这可能是因为许多历史实现使用静态缓冲区来“打印”错误字符串。

答案 2 :(得分:1)

关于静态缓冲区的响应是错误的;返回的指针类型是否为const与缓冲区无关。返回类型完全是关于API与不使用const的历史代码的兼容性,并且它没有任何损害。编写现代const-aware代码的人只需立即使用返回值或将其存储到指向const的变量中。