我有这样的代码,但我不断收到此错误:
A value of type "const char*" cannot be used to initialize an entity of type "char *"
到底是怎么回事?
我已阅读以下主题,但无法看到我的答案的任何结果,因为它们都来自char
to char*
或者char*
到char
:
值类型 const char 不能用于初始化 char* 类型的实体
char* 类型的值不能用于初始化"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;
}
我正在使用 Visual Studio Community 2017
答案
那是对的。
const char hello[] = "hello, world!";
char* jello = hello; // Not allowed, because:
jello[0] = 'J'; // Undefined behavior!
哎呀! const char*
是一个非常量指针const char
。char*
,你已经失去了它const
财产。
Aconst
指向 非常量char
将是一个char* const
,你可以初始化一个char*
如果你愿意的话,可以整天这样。
如果你真的愿意,你可以通过以下方式实现这一目标const_cast<char*>(p)
,我偶尔也会这样做,但这通常是严重设计缺陷的迹象。可能错误在于某些实现会将常量存储在只读内存中并崩溃。
顺便说一句,C 中的规则是不同的。const
关键字,并且您永远不应该编写使用字符串常量的非常量别名的新代码。