vs2017中字符串赋值给char*的问题

a75326239 2018-02-19 06:27:20
新装了个vs2017.新建一个项目,发现
char* str = "1234asd56";
会报错
const char*类型的值不能用于初始化char*类型的实体
但是从vs2008转过来的工程同样语句不会报错
请问是什么原因
...全文
3733 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yijiuruchen 2020-07-02
  • 打赏
  • 举报
回复
const 的意思是不可变的;如果const char* 可以给char* 赋值 ,那是不是可以通过改变char* 来改变const char* 的值,是不是违背了const的定义。原来可以用是因为 原来是个bug现在改正了。你可以自己申请一块内存使用memcpy来进行赋值啊。
离水的鱼儿 2019-07-04
  • 打赏
  • 举报
回复
可以强制转换,char*就const char*
favomj 2019-07-02
  • 打赏
  • 举报
回复 1
今天碰上了 这么改好的。。 char* label; char lab[10] = "基准"; label = lab;
onbigion13 2018-04-17
  • 打赏
  • 举报
回复
今天也遇到这个问题,找了半天才找到这里。这个规定真的会带来很多麻烦,在vs2013都可以通过编译的。17就不行了。这给类里面的成员的初始化带来很大麻烦。有的地方的说法是用常指针作为构造函数形参,但是我的成员函数很多是面向字符数组的函数,要是把构造函数形参改成常指针,那我的类的定义全都得改。我觉得这个小空子,赚了不会产生什么大问题,不钻反而会造成麻烦。
a75326239 2018-02-25
  • 打赏
  • 举报
回复
确实是个历史问题但是一般编译器只是给出一个warning 如果const char* 不能赋值给char*好多东西做起来就很麻烦了
自信男孩 2018-02-22
  • 打赏
  • 举报
回复
const char *str = "1234asd56";
这样写才最好的,正确的。
paschen 2018-02-19
  • 打赏
  • 举报
回复
"1234asd56"是常量 ,正确的写法本身就是:const char* str = "1234asd56"; 之所以可以写成char*是历史遗留原因,但你修改这个字符串时,你程序可能就崩溃了,新版本VS对这个进行了更严格的控件
a75326239 2018-02-19
  • 打赏
  • 举报
回复
经过仔细比较两项目属性发现新建项目的C/C++——语言——符合模式默认为是 将其改为否则编译不再报错

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧