C 中 char[] 和 char * 之间有什么区别?
据我所知,两者都创建了 make 's' 指向字符数组的指针。
然而,
char s[] = "hello";
s[3] = 'a';
printf("\n%s\n", s);
prints helao
,while
char * s = "hello";
s[3] = 'a';
printf("\n%s\n", s);
给我一个分段错误。为什么会有这样的差异呢?
我在 Ubuntu 12.04 上使用 gcc。
使用时char s[] = "hello";
,char数组是在当前函数的作用域中创建的,因此进入函数时在堆栈上分配内存。
使用时char *s = "hello";
, s
是一个指向常量字符串的指针,编译器将其保存在程序的内存块中,该内存块被阻止写入访问,因此出现分段错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)