鱼C论坛

 找回密码
 立即注册
查看: 2174|回复: 5

[已解决]VS问题求助!!请大佬指点一下

[复制链接]
发表于 2022-7-31 10:57:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<string.h>

int main() {

        char *str = "I Love My BeiBei ! !";
        int i, j;

        j = strlen(str);//strlen语句读取数组str的元素数量

        for (i = 0; i < j; i++) {
        
        
                printf("%c",str[i]);
        
        }
        printf("\n");

        return 0;
}


为啥照着小甲鱼的代码不行
VS在char *str = "I Love My BeiBei ! !";这一行报错
求指点!!!!
最佳答案
2022-7-31 15:38:01
本帖最后由 aaron0919 于 2022-7-31 15:39 编辑

index.c++: In function 'int main()':
index.c++:6:21: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
    6 |         char *str = "I Love My BeiBei ! !";
      |                     ^~~~~~~~~~~~~~~~~~~~~~
解决方法:
char *str = "I Love My BeiBei ! !"改为
char* p = (char*)"I Love My BeiBei ! !";即可

我们在学习c或者c++的时候都知道,如果在赋值操作的时候,等号两边的变量类型不一样,那么编译器会进行一种叫做 implicit conversion 的操作来使得变量可以被赋值。

在我们上面的表达式中就存在这样的一个问题,等号右边的"abc"是一个不变常量,在c++中叫做string literal,type是const char *,而p则是一个char指针。如果强行赋值会发生什么呢?没错,就是将右边的常量强制类型转换成一个指针,结果就是我们在修改一个const常量。编译运行的结果会因编译器和操作系统共同决定,有的编译器会通过,有的会抛异常,就算过了也可能因为操作系统的敏感性而被杀掉。

像这种直接将string literal 赋值给指针的操作被开发者们认为是deprecated,只不过由于以前很多代码都有这种习惯,为了兼容,就保留下来了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-31 12:02:18 | 显示全部楼层
您看是不是如果您能把报错的信息同样分享出来的话大家就更有机会确认问题的原因了呢?
另外盲猜您需要
const char *str = "I Love My BeiBei ! !";
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-31 15:23:44 | 显示全部楼层
VS不允许用字符串常量给指针赋值,直接用数组吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-31 15:38:01 | 显示全部楼层    本楼为最佳答案   
本帖最后由 aaron0919 于 2022-7-31 15:39 编辑

index.c++: In function 'int main()':
index.c++:6:21: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
    6 |         char *str = "I Love My BeiBei ! !";
      |                     ^~~~~~~~~~~~~~~~~~~~~~
解决方法:
char *str = "I Love My BeiBei ! !"改为
char* p = (char*)"I Love My BeiBei ! !";即可

我们在学习c或者c++的时候都知道,如果在赋值操作的时候,等号两边的变量类型不一样,那么编译器会进行一种叫做 implicit conversion 的操作来使得变量可以被赋值。

在我们上面的表达式中就存在这样的一个问题,等号右边的"abc"是一个不变常量,在c++中叫做string literal,type是const char *,而p则是一个char指针。如果强行赋值会发生什么呢?没错,就是将右边的常量强制类型转换成一个指针,结果就是我们在修改一个const常量。编译运行的结果会因编译器和操作系统共同决定,有的编译器会通过,有的会抛异常,就算过了也可能因为操作系统的敏感性而被杀掉。

像这种直接将string literal 赋值给指针的操作被开发者们认为是deprecated,只不过由于以前很多代码都有这种习惯,为了兼容,就保留下来了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-1 14:38:57 | 显示全部楼层
aaron0919 发表于 2022-7-31 15:38
index.c++: In function 'int main()':
index.c++:6:21: warning: ISO C++ forbids converting a string c ...

还不是很明白您是怎么改的诶?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-2 08:01:12 | 显示全部楼层
康总 发表于 2022-8-1 14:38
还不是很明白您是怎么改的诶?

先把右边的字符型改为指针,再将值传给str,值的类型是字符指针型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 07:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表