【发布时间】:2012-02-18 02:25:31
【问题描述】:
在我的库中,我必须向调用者返回一个字符串。我返回的字符串将是一个全局数组,调用者的预期用途只是读取字符串。我不希望他们修改它..
这是声明函数的正确方法吗..
const char * get_some_details();
当调用者将返回值分配给 char * ptr 或分配给 const char * ptr 但稍后尝试修改它时,这应该会生成警告(仅尝试 gcc)。
我问是因为我希望像 getenv() 这样的函数返回 const char *。但它返回 char *。返回 const char * 有什么问题吗?
【问题讨论】:
-
getenv 返回 char* 因为返回的缓冲区指针不是常量。它包含调用 getenv 后的结果字符串,但以后调用 getenv、setenv 或 unsetenv 可以更改相同的缓冲区
-
所以下面getenv()的用法不正确?name=getenv("NAME"); id=getenv("ID");使用名称和 ID。第二次调用 getenv() 可以覆盖之前指向的任何名称