Code Bye

指针数组赋值出错?求找原因

char *s1=”4354*?????dd”;
int len=strlen(s1);
for (int i=0;i<len;i++)
{
s1[i]=”A”;                               //出错代码
}
printf(“s1=%s”,s1);
编译没错,运行时报访问冲突….
把 char *s1=”4354*?????dd”;改成char  s1[]=”4354*?????dd”;
就没问题了.求告知出错原因
解决方案

60

char *s1=”4354*?????dd”;
这样的写法表示s1指向的是常量区的常量字符串”4354*?????dd”,该区域一般是禁止进行写操作的
char  s1[]=”4354*?????dd”;
这样的写法表示,你是在栈上开辟的空间,是可以进行读写操作的

10

char const *p = “1234”;
这个写法是正确的。
char *p = “1234”;
这个写法是错误的,但是编译器不报错,是原因是历史的原因。
char const *p = “1234”; 是定义一个指针,这个指针指向 “1234” 所在区域,而这个区域所在的 section 是只读的。
当你写入的时候, CPU 就保护异常了。
char p[] = “1234” 是定义一个数组,使用 “1234” 给这个数组赋值。而这个数组是定义在你的数据区。是可读写的。
她和定义字符串行为一致,使用原因是 “1234” 这个字符串复制到数组是有最后的 “\0” 的。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明指针数组赋值出错?求找原因