我只是略读C99标准,寻找我现在不记得的东西,当我注意到从strerror
函数返回的指针(第7.12.6.2节)不是const限定的,即使标准说:
strerror函数返回指向字符串的指针,其内容为
特定于语言环境。 指向的数组不得被程序修改,
但可能会被后续调用strerror函数覆盖。
这个函数有一个明显的原因是返回一个可修改的字符串而不是像:
char const * const strerror(int errnum);
或至少
char const * strerror(int errnum);
感谢。
答案 0 :(得分:5)
与字符串文字的类型相同:它在C89中就像那样,描述了在语言中引入const
之前的习惯。更改它会使当前有效的程序无效。
答案 1 :(得分:1)
这可能是因为许多历史实现使用静态缓冲区来“打印”错误字符串。
答案 2 :(得分:1)
关于静态缓冲区的响应是错误的;返回的指针类型是否为const与缓冲区无关。返回类型完全是关于API与不使用const的历史代码的兼容性,并且它没有任何损害。编写现代const-aware代码的人只需立即使用返回值或将其存储到指向const的变量中。