代码审查:常量字符 * 修改
Code review: const char * modification
我刚刚编写了以下代码,它正在使用g++
.它应该不起作用。为什么它有效?
#include <iostream>
using namespace std;
int main()
{
//char const *cstr;
const char *cstr;
char *cptr;
std::cin>>cptr;
cstr = cptr;
cstr = "CPP";
cout<<cstr;
return 0;
}
很明显,cstr
const
所以它的修改cstr = "CPP";
不应该起作用,但它正在工作。为什么?
cstr
是指向常量的非常量指针。可以将其分配给和重新分配。
指向常量的常量指针将char const* const cstr
。
此代码会导致未定义的行为(如果cin
上有任何输入(:
std::cin>>cptr;
该代码的含义是从cin
中读取字符并将它们写入cptr
指向的空间。但是您没有初始化cptr
.
当程序具有未定义的行为时,任何事情都可能发生,包括"按预期工作"。
const char *cstr;
因为很明显,
cstr
是常量
不,不是。
它是非const
的,但它所指向的东西是const
。
此外,您正在尝试读取不存在的char
缓冲区。
停止使用C型弦,而是给自己买一些闪亮的std::string
。
对于任何像我一样在涉及带有 const 声明的指针时感到困惑的人,请使用 http://cdecl.org/。
相关文章:
- 以简单的方式修改常量字符 * 与字符 * 内容
- 如何修改只读内存中的字符
- C++ 修改函数内部的字符
- 打开一个文件,修改每个字符,然后执行反向操作不输出原始文件
- C++,字符* 字符串修改
- 如何使用用户输入正确修改 2D 数组中的字符数组元素?专门用于电影院座位
- 为什么这个常量字符*在实际修改后无法修改?
- 修改正则表达式以包含反斜杠和单引号(以便反斜杠表现为转义字符)
- 代码审查:常量字符 * 修改
- 如何修改函数内的字符数组
- 根据向量<bool>修改字符的位
- 当试图在ostringstream中连接一个字符串时,这些字符串的内容会被修改和重构,字符串会在开始时被添加
- 表达式必须是可修改的左值(字符数组)
- 修改 C++ 中的字符*
- C++:如何修改全局字符字符串
- 修改字符 *常量字符串
- 比较字符串中的字符(由"="运算符修改)
- C 字符串空终止字符 0 修改
- 使用 &front() 修改 std::string 中的基础字符数组
- 在c++中修改字符数组的特定部分