YoRHa_2_B
2018-02-10 03:51
采纳率: 100%
浏览 3.4k

无法使用char *p定义字符串指针变量

初学C,用的是VS2017
char *p="xxx";
这么简单的定义语句提示 const char *" 类型的值不能用于初始化 "char *" 类型的实体
然后在char前面加上const就一切正常了,但字符串指针难道不是char *p这样定义的么?怎么样才能定义一个字符串指针变量?难道是因为VS2017的问题么?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

21条回答 默认 最新

  • qq_33536863 2018-02-11 09:03
    已采纳

    1、字符串“XXX”是const类型,严格规定不能将一个const类型赋给非const类型,但可以将一个非const类型赋给const类型
    2、字符串“XXX”是保存在常量区的,不能被修改,而指针指向他,若要修改*ptr的值就是对字符串的修改,是不对的

    已采纳该答案
    打赏 评论
  • liuxing324 2018-02-10 03:54

    提示的很准确的,你把常量赋给了非常量!

    打赏 评论
  • f1ngw5 2018-02-10 04:07

    "xxx"字符串保存在常量存储区里面

    打赏 评论
  • qq_39217220 2018-02-10 04:31

    赋值有问题,静态常量不可以

    打赏 评论
  • qq_39774941 2018-02-10 04:39

    初始化时,c语言中的指针变量是行不通的

    打赏 评论
  • xf81500 2018-02-10 05:34

    "xxx"字符串是常量,在程序编译时就已经指定存储地址了的。

    打赏 评论
  • zhangjun460 2018-02-10 06:35

    字符串保存在常量存储区里面

    打赏 评论
  • 我要学习别拦着我 2018-02-10 07:07

    定义char *p的时候给赋值应该是 p=某个地址,这时候指针变量p接收的是地址而不是值,要接受值应该 多添一行 *p=‘a’,而且是字符变量,不能给字符串吧。

    打赏 评论
  • 伯约否 2018-02-10 07:37

    静态常量指针不能被再次赋值

    打赏 评论
  • 孙贺Sunny 2018-02-10 07:39

    建议初学者用GCC, 有好多IDE dev-cpp 等等, 问题在于动态指针不能指向常量

    打赏 评论
  • wwwwpp184 2018-02-10 09:04

    "xxx"是常量,在编译时已经存储在进程的常量区域。VS2017应该采用C11标准,对C语法检查更严格.

    打赏 评论
  • 有点贪玩 2018-02-10 09:26

    const char*p = "..."; 就行了

    打赏 评论
  • 小麦爸 2018-02-10 09:31

    建议了解一下常亮和非常亮 这个是编译器对c语言语法的检查

    打赏 评论
  • qq_18671169 2018-02-11 02:01

    const char*p = "..."; 变量之前要声明

    打赏 评论
  • 大唐悟空 2018-02-11 02:31

    用数组表示最给力,char str[1024]="2018-happy new year";
    printf("%s\n",str);

                                    在linux下用gcc编译,运行是能通过的
                                                            char *p="happy new year";
                                                            printf("%s\n",p);
    
    打赏 评论
  • gongtao1988 2018-02-11 02:46

    常量与变量类型不匹配

    打赏 评论
  • 快乐老鸟 2018-02-11 02:53

    学习一下const char *、char const *、char * const的区别之后,你会有新的认知。

    打赏 评论
  • NewbieGamer 2018-02-11 03:52

    动态指针不能指向常量

    打赏 评论
  • bernardLee 2018-02-11 04:02

    "XXXXXXX"是字符串常量(const char*),可以通过typeid().name()函数观察到.

    打赏 评论
  • dance942 2018-02-12 07:52

    "xxx"字符串是常量,在程序编译时就已经指定存储地址了的。
    不加constant,就要给_*p指针先分配一个内存。

    打赏 评论
  • 休止符x 2018-02-14 13:19

    我在linux环境下,用gcc编译了以下代码:
    #include
    int main()
    {
    char *p="xxx";
    printf("%s\n",p);
    return 0;
    }
    运行后,打印出来的是:xxx
    所以你的问题原因是VS2017中的规则,书上写的没错。

    打赏 评论

相关推荐 更多相似问题