代码审查:常量字符 * 修改

Code review: const char * modification

本文关键字:修改 字符 常量 代码审查      更新时间:2023-10-16

我刚刚编写了以下代码,它正在使用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/。