修改 getenv strerror 和 setlocale 函数返回的字符串

修改标准函数 getenv()strerror()setlocale() 返回的字符串是未定义的。因此,实现可以为这些字符串使用静态存储。

getenv() 函数 C11,§7.22.4.7,4 表示:

getenv 函数返回指向与匹配列表成员关联的字符串的指针。指向的字符串不应被程序修改,但可能会被后续调用 getenv 函数覆盖。

strerror() 函数,C11,§7.23.6.3,4 说:

strerror 函数返回一个指向字符串的指针,其内容是 localespeci fi c。指向的数组不应被程序修改,但可能会被后续的 strerror 函数调用覆盖。

setlocale() 函数,C11,§7.11.1.1,8 说:

setlocale 函数返回的字符串指针是这样的,即使用该字符串值及其相关类别的后续调用将恢复该程序的语言环境的该部分。指向的字符串不应被程序修改,但可能会被后续调用 setlocale 函数覆盖。

类似地,localeconv() 函数返回一个指向 struct lconv 的指针,该指针不应被修改。

localeconv() 函数,C11,§7.11.2.1,8 说:

localeconv 函数返回指向填充对象的指针。返回值指向的结构不应由程序修改,但可以通过后续调用 localeconv 函数来覆盖。