一. 问题现象
char * pt = "China";
cout << setw(10) << pt <<endl; //指定输出宽度为10 输出字符串
编译会报如下警告:

二. 问题原因
翻译成中文的意思是“禁止将字符串常量转换为“char *”
三. 解决方法
第一种方法是:
char* name = (char*)"China";
第二种方法:
char const *name="China";
简单来说,在赋值时,左右两边的类型不同的话,编译器会implicit conversion来强制转换类型,赋值号右边的“China”是一个不变常量类型是const char,左边name是一个指针。如果强行赋值的话,那么编译器会将右边强制转化成一个指针类型,这种情况会使得程序在别的编译器可能会出现报错。
解决办法就是主动将右边转化成指针类型或者将左边转化成const不可修改。
文章讨论了在C++中使用char*pt=China;时编译警告的问题,原因是字符串常量不能直接赋值给非constchar*指针。提供了两种解决方法:使用constchar*或主动进行类型转换。
4815

被折叠的 条评论
为什么被折叠?



