读书人

请问一个字符串指针的有关问题

发布时间: 2012-09-23 10:28:10 作者: rapoo

请教一个字符串指针的问题
小弟最近在学习学习C语言,今天编程发现一点问题:

void main()
{
char *p="abcdefg";
*p='h';
printf("%c\n",*p);
}

上面的程序正常编译,在运行时报内存错误。但是如果写成下面则可以:

void main()
{
char p[10]="abcdefg";
*p='h';
printf("%c\n",*p);
}

特请教这是什么问题?

[解决办法]
1、char *p="abcdefg"相当于p指向的是字符串常量"abcdefg",因此其内容是不能被改变的;
2、而char p[10]="abcdefg"只是为数组p赋初值而已,里面的元素是可以被改变的。
[解决办法]
1楼的答案无论在C还是C++都尚不能称为正确,主要问题在第1个答案。

在C中,字符串字面量不属于常量,或者说,在C中不存在字符串常量,但在C++中属于常量,C++才可将字符串字面量称为字符串常量。

无论在C还是C++中,对字符串字面量的修改属于未定义行为,无所谓可修改或不可修改,无论编译器是否允许修改,都没有违反标准。

读书人网 >C语言

热点推荐