变量指针无法指向const字符串常量

变量指针无法指向const字符串常量

char *str = "I am a chinese";        

//这里编译器报错:const char*类型的值不能用于初始化char*类型的实体,加上const就不报错了,但是加上const后边就没法通过赋值的方式接续字符串了。 我的是.cpp文件

const char *res = "I love China";


char *address = str;

while (*str!='\0') 

{

str++;

}

while (*res!='\0')

{

*(str++) = *res++;

}

str = address;

cout << str << endl;


正在回答

登陆购买课程后可参与讨论,去登陆

3回答

其实,你这段代码的主要问题,并不是错在char *str = "I am a chinese";单独这个代码是可以编译通过的。代码执行的问题会出在*(str++) = *res++;报出内存异常。建议:可以先按照老师的拼接字符串的方式,感受一下拼接过程的原理。当然你也可以直接使用类库的方式,进行字符串的拼接。如下所示:

char* str1 = "Hello";
char*str2 = "World";
char str3[20];
strcpy(str3, str1);
strcat(str3, str2);
cout << str3 << endl;

注意在连接之前,都会拷贝一下,然后再进行拼接。

  • KistPlus 提问者 #1
    我的 vs2017 写这句直接编译报错 char *str = "I am a chinese";
    2018-04-02 23:56:21
  • imooc_澈 回复 提问者 KistPlus #2
    你好,该变量本身是常量字符串,正确写法前面就应该加const ,在很多平台上char *str = "I am a chinese";也能正常编译通过算是历史遗留问题,新版的VS对此作了严格的控制,因此你的会报这个错误,前面加上const就好了。另外,不管char *str = "I am a chinese";这一句在编译的时候是否报错,它都是一个常量字符串,你后面的拼接操作都是有问题的哦,常量定义以后是不能改变的,所以*(str++) = *res++肯定会报错,先将它copy到另一个可变变量里,再进行拼接即可,祝学习愉快~
    2018-04-03 10:02:25
好帮手慕查理 2018-04-02 10:35:55

您好,请反馈您使用的编辑器,以便帮助您调试。祝学习愉快!

  • 提问者 KistPlus #1
    vs2017
    2018-04-02 12:54:48
guly 2018-04-01 12:55:36

你好,char *res = "I love China";  左边是指针,右边是char类型不匹配,

建议参考一下定义方法:

const char *a[] = {"i,"love,”China“} ;

如果解决您的问题请采纳,祝学习愉快!

  • 提问者 KistPlus #1
    谢谢你的回答,不过你这个定义的是指针数组,而非一个普通的指针。你的a+1和我的res+1移动的长度都不一样,根本就不是同一种指针。希望你能在了解这段代码想要实现的功能后再回答
    2018-04-01 13:38:10
  • 提问者 KistPlus #2
    还有一点 char *res = "I love China" 这个在老师的视频里面是可以编译通过的,我初步怀疑老师的是.c文件,而我的的是.cpp文件,在.cpp里面变量指针直接指向常量是会编译报错的。
    2018-04-01 13:44:41
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
C++零基础入门 热门编程语言 二级考试必备
  • 参与学习       529    人
  • 提交作业       110    份
  • 解答问题       594    个

无论您是零基础、还是想晋升,亦或是想转型,C++无疑都是最佳选择。本路径共分为基础语法、指针与引用、面向对象三大模块,为你开启入门C++编程的大门!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师