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”;
就没问题了.求告知出错原因
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”;
这样的写法表示,你是在栈上开辟的空间,是可以进行读写操作的
这样的写法表示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” 的。
这个写法是正确的。
char *p = “1234”;
这个写法是错误的,但是编译器不报错,是原因是历史的原因。
char const *p = “1234”; 是定义一个指针,这个指针指向 “1234” 所在区域,而这个区域所在的 section 是只读的。
当你写入的时候, CPU 就保护异常了。
char p[] = “1234” 是定义一个数组,使用 “1234” 给这个数组赋值。而这个数组是定义在你的数据区。是可读写的。
她和定义字符串行为一致,使用原因是 “1234” 这个字符串复制到数组是有最后的 “\0” 的。