如题,按照我的理解,下列程序中,*(p+0)
指向字符't'
,而*(p+1)
指向字符'e'
,依此类推。
而 *(p+0) = 'T';
这一语句会让字符串从test
变成Test
,printf输出时应输出Test
,为何会导致程序崩溃?
#include <stdio.h>
int main(void)
{
char *p = "test";
*(p+0) = 'T';
printf("%s\n",p);
return 0;
}
如题,按照我的理解,下列程序中,*(p+0)
指向字符't'
,而*(p+1)
指向字符'e'
,依此类推。
而 *(p+0) = 'T';
这一语句会让字符串从test
变成Test
,printf输出时应输出Test
,为何会导致程序崩溃?
#include <stdio.h>
int main(void)
{
char *p = "test";
*(p+0) = 'T';
printf("%s\n",p);
return 0;
}
如题主所写char *p = "test"
,则p
是指向字符串常量的指针,一般情况常量是放在代码区(Read Only),因此在写入时会导致运行时错误。
如果想要操作字符串,应该改为char s[] = "test"
,这样写s
是一个字符串数组并已初始化成test
,并且s
是分配在栈上的,因此可以正常进行读写操作。
p
只是指向字符串常量的指针, 在 C 语言中, 字符串常量不能更改.这个和字符数组是有区别的, 字符数组的元素可以更改,字符串常量不能更改.