初学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中的规则,书上写的没错。