为什么要使用const char *形式的字符串

samuelbrody1249

采取以下两种形式创建字符串:

const char* pt1 = "Hello";
      char* pt2 = "Goodbye";

上面有什么用const以我的理解,

ptr = "Adios";

两者均适用,因为这会更改指针的地址,但是尝试更改字符串中的字母将对两者均失败:

const char* pt1 = "Hello";

编译器错误:分配只读位置

char* pt2 = "Goodbye";

运行时错误:seg错误,试图更改.rodata

由于它们产生相同的结果(即错误),因此const在定义字符串时使用有什么好处吗?

chqrlie

定义指向字符串常量(也就是字符串文字)的指针,const char *如果您尝试在代码中的其他地方尝试修改pt1指向的字符串常量,则编译器可以检测到错误的访问*pt1 = 'A';而如果使用pt1type char *则会在运行时具有未定义的行为,从而导致在某些架构上发生崩溃,而对其他架构的影响则不太明显,但潜在的破坏性更大。

为了扩展这个主题,有时const对于指针定义的含义会感到困惑

const char *pt1 = "Hello";定义一个可修改的指针pt1,该指针指向char无法通过它修改的数组由于"Hello"是字符串常量,因此它是的正确类型pt1pt1可以修改为指向另一个字符串,或者char,可以修改或不修改,或者设置为NULL

char *pt2 = "Hello";定义一个可修改的指针pt2,该指针指向char可以通过其修改的数组尽管C标准"Hello"具有与历史代码兼容的恒定性,但仍允许这样做。gccclang可以使用-Wwrite-strings命令行选项禁用此行为我强烈建议使用此警告以及更多警告以避免常见错误。

const char * const pt3 = "Hello";定义一个常量指针pt3,该指针指向char不能通过它修改的数组pt3无法修改为指向另一个字符串,甚至不能设置为NULL

char * const pt4 = "Hello";定义一个常量指针pt4,该指针指向char可以通过其修改的数组pt4初始化后无法更改。

char并且const可以放置在任何顺序,但无论const是之前或之后*产生很大的差别。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

const char *与字符串文字的使用

在字符串中加入 const char*

const char *是字符串还是指针

如何比較 const char* 字符串?

为什么在这里使用静态char const *而不是字符串文字会有所不同?

为什么返回带有字符串文字的const char *的函数起作用?

为什么“自动”将字符串声明为const char *而不是std :: string?

为什么调用cout.operator <<(const char *)打印地址而不是字符串?

为什么我的编译器将字符串理解为const char []?

为什么在动态分配字符串时string :: c_str()返回const char *?

对C的char *字符串使用NULL

为什么单字母字符串有Char类型?

为什么密码比字符串更喜欢char []?

为什么字符串文字比静态char数组快?

为什么char * foo()返回空字符串?

为什么在写入以字符串文字形式初始化的“ char * s”而不是“ char s []”时出现分段错误?

为什么要使用Char而不是String?

为什么不需要使用 hton/ntoh 函数来发送 const char*?

C ++-char const * const *-<读取字符串的错误>

为什么字符串Remove()方法允许使用char作为参数?

为什么不能使用char **定义字符串数组?

C /使用动态malloc复制字符串,从const char * org到char ** cpy

将字符串分配给const char *然后将const char *作为缓冲区(void *)传递给函数时,为什么结果不正确?

为什么字符串(const char * s,size_t pos,size_t len = npos)有效?

为什么取消引用字符串迭代器会产生一个 const char 引用?

为什么在作为 const char* 返回时会在此处创建临时字符串?[Stroustrup 的书的例子]

从C ++中的字符串文字返回const char *吗?

从int转换为c字符串(const char *)失败

在存储在const char数组中之前修改字符串