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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                                在linux下用gcc编译,运行是能通过的
                                                        char *p="happy new year";
                                                        printf("%s\n",p);

常量与变量类型不匹配

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

动态指针不能指向常量

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

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

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