VS17中字面值字符串问题

在VS2017中,遇到将字符串字面量转换为`const char*`时的编译错误。GCC虽然能编译但有警告。解决方法是修改VS的编译器设置,禁用`/permissive-`选项以避免不安全的转换,或者在语言设置中选择禁止字符串字面量转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

之前在windows中写const的总结, 在vs17中测试代码, 结果在测试字符串面值时出现了意料之外的错误.

问题
 char *str = "vs2017";

这行代码在gcc中能够通过编译, 只是有一个警告 : warning: ISO C++ forbids converting a string constant to char* [-Wwrite-strings]

但是在vs中却不能通过编译, 错误 :

在这里插入图片描述

所以同样我在做consttypedef的问题上, vs已无法编译通过, 例子如下 :

typedef char * type;

const type str = "str2017";

错误的结果也是一样, 然而gcc同样能够通过编译.
在这里插入图片描述

解决

一种办法是换一个编译器试试, 还有一种可以用vs自带的中断工具编译就可以, 但是肯定有人愿意直接使用编译软件本身, 解决办法微软官方也是有写. 这里简单的修改方法写出.

以上问题在于软件设置编译时命令行默认参数.

右键文件, 选择文件属性, 你就可以看到这样的界面, 再选择命令行就可以看到这样的命令行参数, 问题就在/permissive- : 就是禁止像字面值转为普通指针这样不安全的隐患.

在这里插入图片描述

所以最终删除/permissive 就行, 选中语言->符号模式->否. OK! 问题解决.

在这里插入图片描述

在这里插入图片描述

参考

/permissive- (Standards conformance)

/Zc:strictStrings (Disable string literal type conversion)

Give Visual C++ a Switch to Standard Conformance

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值