VS2019 错误C2440和E0144以及解决方法


错误:C2440&E0144

VS2019编译器使用字符串常量初始化字符指针变量,编译器报错
在这里插入图片描述

原因查找

  • 官方解释C2440错误:编译器错误C2440
  • 意思是:在 C 中,字符串文字的类型是数组char,但在C++,它是数组const char。如果严格按照C++标准,编译器选项设置了/zc: strictstrings,则编译器要求通过使用字符串文本初始化的指针符合严格的 const 限定。即不能像以上使用字符串常量初始化字符指针变量。

解决方案

  • 实施类型转换:将字符串常量类型从(const char*)强制转换为(char*),再初始化字符指针变量。此处类型转换有两种方法,如下:
    char* s = const_cast<char *>("my name is:");
    char* s1 = (char *)"鱼翔浅底zyx";
    cout << s << s1 << endl;

使用(char *)或者 const_cast 运算符。 const_cast 运算符在这里只是消除了const限定符,而不能改变 (char *) 类型,因此使用const限定符更加安全。

  • 改变编译器/zc: strictstrings设置,即编译器不强制实施标准C++ const通过使用字符串文本初始化的字符串指针的限定资格。通过查阅资料,发现有将编译器**/permissive-(标准符合性)**由 改为 的 ,这个设置只有2017版本以上的VS有,设置路径:项目->属性,在属性页做如下设置。
    在这里插入图片描述
    官方对 **/permissive-(标准符合性)**选项设置解释:/permissive。选择 则默认编译器符合编译器标准行为,如字符串文本的一致性,则编译器不严格执行标准。一致性的选项:/Zc(一致性)。所以选项 /permissive 改为否则以上选项均不严格执行标准一致性,而现在我们只是需要更改字符串文本一致性,即 /zc: strictstrings 选项。按照官方文档设置:
    在这里插入图片描述
    在这里插入图片描述
    在C/C++ —> 命令行里输入 /Zc:strictStrings- 命令即可关闭。
  • 第三只能通过字符数组存储字符串文本喽
char s[] = "my name";

学习字符串的第一行代码就那么艰辛,不过也借此熟悉了一下VS2019开发环境,应该不亏哈…

猜你喜欢

转载自blog.csdn.net/qq_36439722/article/details/105849581