VS17中字面值字符串问题

从字符流到语义单元:深入理解编译原理中的Token化过程 本文深入探讨了编译原理中的Token化过程,详细解析了如何将源代码字符流转换为有意义的语义单元(Token)。通过实例代码和状态机原理,展示了关键字、标识符、数字字面值等常见Token类型的处理逻辑,并比较了Python、JavaScript等语言在Token化中的差异。文章还提供了实现简易词法分析器的实践指南,帮助开发者深入理解编译器的底层工作原理。 阅读详情

引言

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

问题
 char *str = "vs2017";

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

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

在这里插入图片描述

所以同样我在做const与typedef的问题上, 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

VS2017 C2440错误解析:从const char[]到char*的类型转换陷阱与实战修复 本文深入解析VS2017中C2440错误的成因与解决方案,重点讨论从const char[]到char*的类型转换陷阱。通过实例代码演示如何正确使用const修饰符、临时数组转换及std::string等现代C++技术,帮助开发者规避常见编译错误并提升代码安全性。 阅读详情

相关推荐

Mplus—随机截距交叉滞后模型(RI-CLPM)语法

随机截距交叉滞后模型RI-CLPM的Mplus语法。

m0_54401011的博客 2535

warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]

在C++中, char* p = "abc";  // valid in C, invalid in C++ 会跳出警告:warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] 改成下面会通过warning char* p = (char*)"abc"; // OK 或者改成下面 char const *p = "abc";  // OK 原因解析: 学习c或者c++的时候都

aa804738534的博客 2万+

ICESat-2数据下载及处理分析随笔

ICESat-2全称是Ice,Cloud and land Elevation Satellite -2。看名字我们能知道它的任务是测ice,cloud和land elevation,而且这是一个Satellite,是一颗卫星。那么这里我们就要分清ICESat-2和ATLAS的关系,ICESat-2是星载平台,是一个space observatory,ATLAS是这个星载平台上搭载的单光子激光雷达系统。

u011322358的博客 1万+

【C/C++】报错:C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]

是一个指向常量字符的指针,你不打算修改通过这个指针指向的字符串。这与 C++ 的类型安全性原则一致,有助于防止不小心修改字符串字面量导致的错误。类型的变量会引发警告(或错误),因为 ISO C++ 标准要求字符串常量是不可修改的。类型的变量时,实际上是试图忽略这个常量的不可修改属性,来处理字符串,除非你有使用 C 风格字符串的特定需求。如果你需要一个可修改的字符串,你可以使用字符数组或。当尝试将一个字符串常量分配给一个。在 C++ 中,尝试将字符串常量分配给。,比如尝试修改这个字符串常量的内容。

Juryman155的博客 2245

weblogic 集群搭建,双机部署,相关问题记录

4.5.集群搭建1 参考网址https://wenku.baidu.com/view/76365129cd1755270722192e453610661ed95aa4.html IP地址 端口 角色 192.168.1.160 9001 AdminServer ...

zl386119974的专栏 1670

基于一维卷积神经网络对机械振动信号进行分类并加以预测

基于一维卷积神经网络对机械振动信号进行分类并加以预测 *使用一维卷积神经网络训练振动信号进行二分类 2020年7月16日,一学期没等到开学,然而又放假了。 总览优快云中大多数卷积神经网络都是对二维图片进行分类的,而图片也都是常见的猫狗分类,minst手写数字分类。一维卷积神经网络的使用非常少见,有也是IDMB情感分类,和鸢尾花分类的。 作者研究生就读于河北一所双飞,全国排名270多,哈哈哈,不吹不黑。 在网上翻来翻去找不到一篇可以利用的代码去研究我的机械故障诊断,后来在无奈下到某宝搜寻到一段代码,可以利用

qq_45714906的博客 1万+

warning: ISO C++ forbids converting a string constant to ‘char*‘ [-Wwrite-strings]

简单来说,在赋值时,左右两边的类型不同的话,编译器会implicit conversion来强制转换类型,赋值号右边的“China”是一个不变常量类型是const char。,左边name是一个指针。如果强行赋值的话,那么编译器会将右边强制转化成一个指针类型,这种情况会使得程序在别的编译器可能会出现报错。解决办法就是主动将右边转化成指针类型或者将左边转化成const不可修改。翻译成中文的意思是“禁止将字符串常量转换为“char *”

u012514113的专栏 4282

Python实现ARIMA模型

以下是一个使用Python实现ARIMA(自回归移动平均模型)的简单示例代码。在运行代码之前,请确保已经安装了pandasnumpy和库。ARIMAorder(2,0,2)p = 2d = 0q = 2forecastmatplotlib在实际应用中,你需要将模拟数据替换为真实的时间序列数据,并且通过合适的方法(如信息准则等)来确定pdq的最佳值。除了auto_arima在使用pmdarima。

huanghm88的专栏 1737

vs 2017在release版本传递string变量时失败-解决方法

问题描述 在debug版本下,传递string类型变量没问题,但是在release版本下传递失败,为null。 解决方案: 在项目属性中的c/c+±–>代码生成—>运行库,改为多线程DLL(/MD)即可。

weixin_41949585的博客 434

【锂离子电池力学耦合及相场法模拟技术与应用】

8. 电化学仿真软件的使用与案例分析 (1) 各向异性纳米线锂化应力分析(实例讲解1) (2) 化学反应及死锂现象研究(案例分析2)(3) 锂化循环损伤计算(案例分析3)6. 4. 电池材料的力学与电化学耦合性能分析(1) 耦合效应对电池性能的影响(2) 耦合模型的验证与应。5. 5. 电池颗粒、极片、电芯尺度力-电-化-热多场耦合模型概述力学-7. 颗粒尺度耦合模型在电池失效分析中的应用。2. 2. 电池电极材料的分类与特性。5. (2) 耦合模型的验证与应用。电化学耦合模型与仿真。

weixin_51101456的博客 526

超越音频!STM32 SAI接口在AD7768高速ADC采集中的妙用(含PCB布局指南)

本文深入探讨了如何将STM32的SAI接口应用于AD7768高速ADC的数据采集系统,超越了其传统的音频应用范畴。文章详细解析了SAI协议与ADC时序的匹配方法,提供了从CubeMX配置、DMA数据搬运到关键PCB布局指南的完整实战方案,旨在帮助工程师实现稳定、高精度的工业级高速数据采集。

efc12345678的博客 305

VS的符合模式选项

这里写自定义目录标题参考https://bbs.youkuaiyun.com/topics/392456100参考http://www.dengb.com/cjjc/1352000.html 参考https://bbs.youkuaiyun.com/topics/392456100 参考http://www.dengb.com/cjjc/1352000.html 项目属性->C/C+±>语言->符合模式选项的含义 /permissive-:启用所有严格标准符合性编译器选项,并禁用大部分特定于 Microsoft

n__o_more的博客 4403

NFC门禁卡复制全解析:从M1卡到UID卡的攻防实践

本文深入解析了NFC门禁卡的安全机制与攻防实践。从M1卡基于Crypto1算法的原理漏洞讲起,详细阐述了利用Proxmark3等工具进行侦听、破解密钥及使用UID卡进行复制的完整攻击链条。同时,为防御方提供了从升级CPU卡、启用全扇区认证到部署多因子验证的系统性防护策略,旨在帮助管理员构建更稳固的物理安全防线。

weixin_29182481的博客 1403

VS2013中的C++11新特性

介绍 Visual C++ 2013 Preview 在6月发布了,C++开发者又找到一个编译器可以更好的支持ISO C++ 11 的特性了.本文介绍了这些新的特性并附有代码实例. 你想动手尝试编译文中的这些代码话,需要去下载并安装Visual Studio 2013 Preview (话说:付费吗?),我尚未在其他编译器上测试这些代码,所以我并不知道与Gcc 或Clang的兼容性(可恶

csdidi的专栏 2074

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VS2013中的C++11新特性(转载)

英文原文:C++ 11 features in Visual C++ 2013 Preview 参与翻译(6人): 无奈的钝刀, MtrS, 大志darcy, jimmyjmh, LinuxQueen, soaring 本人仅作为收藏之用,还希望作者允许! 介绍 Visual C++ 2013 Preview 在6月发布了,C++开发者又找到一个编

qq810277189的专栏 1299

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

浅谈C++字符数组与字符串指针

C++字符串字面值常量使用双引号括起的字符序列,以’\0’为结束符。它存放在内存的常量区,自己有固定的首地址。如果将字符串字面值常量的首地址看作指针,那么这个指针是常指针常量(既是常指针,又是指针常量),即字符串指针本身只读而且其指向的内容(字符串的内容)只读。 C++处理字符串有两种方式,即:指针方式和数组方式(字符串指针和字符数组)。 数组方式是在声明数组的时候用字符串来初始化,如: c

ytzj2017的博客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

字符串系列一:C风格字符串

(1)C风格字符串 C风格字符串就是以'\0'结束的字符数组,字符串字面值就是C风格字符串,它以'\0'结尾,类型为const char*。如下面的几个例子: 1 char ca1[] = { 'C','+','+'};//没有'\0'结束符,不是C风格字符串 2 char ca2[] = { 'C','+','+','\0'};//有'\0'结束符,是C风格字符串 3 char ca...

weixin_30512785的博客 86

sizeof(std::string) 的大小

std::string strrang = "abcasdfgggggg111111111111111111111111111111111"; int size4 = sizeof(std::string); int size2 = sizeof(strrang); int size3 = strrang.length(); 在VS2017 debug版本下,size4 =28, size2 = 28. 在使用VS2015的32位debug构建中,sizeof(std::...

baidu_16370559的博客 1739

微软编译器增加了对C++11的支持

原文点击打开链接   星期五,微软小组成员Stutter召开了一次大的会议,指出该公司要把对c++11和C++团体的支持整合在一起。当微软发布了VSt012时,承诺它的架构被设计为支持带外的释放带来了新的功能使环境更快。然而,Sutter公告标志着2012年11月的CTP已经公开揭幕了,它包含了新的编译器提高了Visual C++对C++11标准的支持。虽然没完成,但它表明微软正在向这个方向前

liuhuili23的专栏 993

Visual Studio 2013预览版中的 C++11 新特性

介绍 Visual C++ 2013 Preview 在6月发布了,C++开发者又找到一个编译器可以更好的支持ISO C++ 11 的特性了。本文介绍了这些新的特性并附有代码实例。 你想动手尝试编译文中的这些代码话,需要去下载并安装Visual Studio 2013 Preview,我尚未在其他编译器上测试这些代码,所以我并不知道与Gcc 或Clang的兼容性(可恶的C++)。

shang3988的专栏 1068

C#学习笔记(二)——变量和表达式

Ps:使用这两个关键字可以很方便的把头文件收起来(虽然VS已经集成这个功能= =) 但是可以一下子收起来很多个函数 一、变量 1、简单类型 (1)变量类型 (2)示例一 static void Main(string[] args) { int a; string s; ...

weixin_30849403的博客 84

C++实战

1. 预定义宏 __cplusplus:C++语言的版本号。如:202002(c++20),201703(c++17),201402,201103 __DATE__ :预处理时的日期 __FILE__ :源文件名 __LINE__ :源文件行号 __has_include:是否存在某个可包含的文件 __cpp_modules:是否支持模块机制 __cpp_decltype:是否支持decltype特性 __cppdecltype_auto:是否支持decltype(auto)特性 __cpp_lib_ma

gb173652770的专栏 888

C#夯实基础系列之字符串

string作为我们在编程当中用的最多的数据类型,同时又由于它的特殊性,怎么强调它的重要性都不为过,理解string的一些类型和存储机制,有助于我们写出正确且高效的代码. 一.string类型 1.string的类型 string类型直接继承Object类型,Object类型是引用类型,因而string类型是引用类型无疑. 我们借助VS的类视图可以看到这一点: ...

weixin_30535043的博客 98

c++11新特性

目  录 1 常数表达式 3 2 空指针 3 3 类型推导 3 4 以范围为基础的 for 循环 3 5 无限制的union 3 6 新的字符串字面值 4 7 long long int类别 4 8 允许sizeof运算符作用在类型的数据成员上,无须明确的对象 4 9 初始化列表 5 10 统一初始化 5 11 对象构造的改良和成员变量初始化 5

769

字符串的介绍与字节查看及编译器型号

Microsoft Visual Studio 可以 右键项目 → 属性 → C/C++ → 语言 可以查看编译器语言版本。

别人的话只能作为参考,不能作为自己的人生标准。 467
上一篇: const浅析
下一篇: 线程简单实现
Function_18
博客等级 码龄10年 193粉丝 239原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值