【发布时间】:2020-01-09 02:30:24
【问题描述】:
char* str ="Hello";
在上面的代码中,文字“Hello”存储在......在 DATA 段中,它是只读的。 所以总是声明它不是更好吗:
const char* str = "Hello";
避免不正确的代码如:
*(str+1) = 't';
【问题讨论】:
-
在较新版本的编译器中,对于第一种语法,您至少会收到警告。
-
数据段不是只读的,所以在有只读内存段的系统上,可能不会存储在那里。
-
顺便说一句,没有人真的写
*(str+1),除了那些没有意识到str[1]是指针操作而不是数组的人一。 -
@nabroyan:Clang 和 x86_64 的 GCC 都没有给出这样的警告,即使是
-Wall。事实上,除了 AVR gcc 之外,Godbolt 上的编译器都没有给出这样的警告。你会想到 C++ 吗? -
@EricPostpischil:是的,我的评论与 C++ 有关。要么我没有注意标签,要么后来 C++ 从标签中删除了。
标签: c pointers c-strings string-literals const-correctness