加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 类型为“const char *”的值不能用于初始化“char *”类型

发布时间:2020-12-16 10:14:35 所属栏目:百科 来源:网络整理
导读:我有这样的代码,但我一直收到这个错误: “const char *”类型的值不能用于初始化“char”类型的实体 *“.到底是怎么回事? 我已阅读以下主题,但未能看到任何结果,因为所有结果都是从char到char *或char *到char: Value type const char cannot be used to
我有这样的代码,但我一直收到这个错误:
“const char *”类型的值不能用于初始化“char”类型的实体
*“.到底是怎么回事?
我已阅读以下主题,但未能看到任何结果,因为所有结果都是从char到char *或char *到char:
Value type const char cannot be used to initialize an entity of type char*
Value of type char* cannot be used to initialize an entity of type “char”

#include <iostream>;
using namespace std;

int main() {
    int x = 0; //variable x created
    int cars (14);//cars is created as a variable with value 14
    int debt{ -1000 };//debt created with value 1000
    float cash = 2.32;
    double credit = 32.32;
    char a = 'a';//for char you must use a single quote and not double
    char* sandwich = "ham";
    return 0;
}

编辑:我正在使用2017年的视觉工作室社区

解决方法

那是正确的.假设您有以下代码:

const char hello[] = "hello,world!";
char* jello = hello; // Not allowed,because:
jello[0] = 'J'; // Undefined behavior!

哎呦! const char *是一个指向const char的非const指针.如果将其值赋给非const char *,则会丢失其const属性.

指向非const char的const指针将是char * const,如果需要,您可以整天初始化char *.

你可以,如果你真的想要,用const_cast< char *>(p)实现这个,我偶尔也会这样做,但它通常是严重设计缺陷的标志.如果您实际上让编译器发出指令以写入由字符串常量别名的内存,则会得到未定义的行为.可能出错的许多事情之一是某些实现会将常量存储在只读内存中并崩溃.或者相同的内存字节可能会被重复用于多个目的,因为毕竟,我们警告过你永远不要改变它.

顺便说一句,C中的规则是不同的.这仅仅是为了与没有const关键字的C的早期版本向后兼容,并且您永远不应该编写对字符串常量使用非const别名的新代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读