康总 发表于 2022-7-31 10:57:48

VS问题求助!!请大佬指点一下

#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);
       
        }
        printf("\n");

        return 0;
}



为啥照着小甲鱼的代码不行
VS在char *str = "I Love My BeiBei ! !";这一行报错
求指点!!!!

dolly_yos2 发表于 2022-7-31 12:02:18

您看是不是如果您能把报错的信息同样分享出来的话大家就更有机会确认问题的原因了呢?
另外盲猜您需要
const char *str = "I Love My BeiBei ! !";

风车呼呼呼 发表于 2022-7-31 15:23:44

VS不允许用字符串常量给指针赋值,直接用数组吧

aaron0919 发表于 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,只不过由于以前很多代码都有这种习惯,为了兼容,就保留下来了。

康总 发表于 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 ...

还不是很明白您是怎么改的诶?

aaron0919 发表于 2022-8-2 08:01:12

康总 发表于 2022-8-1 14:38
还不是很明白您是怎么改的诶?

先把右边的字符型改为指针,再将值传给str,值的类型是字符指针型
页: [1]
查看完整版本: VS问题求助!!请大佬指点一下