VS2017中C语言指针的问题

第一次用这个软件,试着把C语言的功能都试一遍。试到指针时发现了问题。
#include
void main()
{
char *p = "I love china";
char *q = "i love shandong";
*p = *q;
}
很简单的程序但是跑起来却出现问题,单步执行到*p = *q时系统图片说明不知如何是好,程序肯定没有问题啊。好像是编译器没法把数据写入地址。求大神。

8个回答

这个是错误的。p和q指向的地址为只读的,代码中所有常量都存放在只读区且只有一份。*p=*q是在修改只读数据,所有报告了异常

huaxiaoxin1
卖安妮的提伯斯 但是用指针作参数实现变量值互换的程序不就是这样的吗
大约 2 年之前 回复

图片说明随便借了本C语言书,上面就这样写的啊=^=

p = q;
不要修改指针所指向的内存 而是直接修改指针

楼上说的对,copy_string(pa,pb)在书上函数参数传的是地址,而不是指针本身,之所以形参那么写是为了表明是引用传递而不是值传递,所以实际上函数改变的是地址。这里说明下,*p代表指针指向的内容,而p仅仅只是地址而已

字符串常量是只读的,不能写!*p=*q相当于用字符串“i love shandong”的第一个字符“i”替换“I love china”的第一个字符“I,这是不允许的。书里面的例子也是错误的!你可以用字符串数组来替代字符串常量,这是可以读写的。

 char p[]="I love china";
 char *q="i love shandong";

 *p=*q;
 //或p[0]=*q;
huaxiaoxin1
卖安妮的提伯斯 谢谢你谢谢你
大约 2 年之前 回复

最后一句代码 有问题 不应该那样写

谢谢大佬们谢谢大佬们

char *p = "I love china";
char *q = "i love shandong";
这样定义指针,指针指向了一个字符串常量,该常量放在内存里的数据区,而字符串常量是不让你修改的,你的代码*p=*q 正是想要修改这个常量值,当然会报错,
而指针变量作为函数参数,这个指针变量时放在栈区,是允许你修改它的内容的。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问