首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

奇怪的字符串赋值有关问题

2012-06-09 
奇怪的字符串赋值问题int main(){char *p hellochar *q ABC*q *pprintf(%s,q)return 0}编

奇怪的字符串赋值问题
int main()
{
  char *p ="hello";
  char *q ="ABC";

  *q = *p;

  printf("%s",q);

  return 0;
}

编译正常但运行后return exit(-1) 出错

但这段代码可以正常运行
  char *p ="hello";
  char q[3] ="ABC";

  q[0] = *p;

  printf("%s",q);


本人c语言环境是fedora gcc编译,在我记忆中,*p=*q没错阿,*p不是字符类型吗


[解决办法]
变量p,q存在静态存储区的,里面的内容对于很多编译器都是不允许修改的,声明改成这样char p[] ="hello"; char q[] ="ABC";应该就不会出错了。

[解决办法]
char *p ="hello";
char *q ="ABC";
这样定义的变量p和q,它们只是两个字符型的指针,保存在栈上。它们指向的字符串叫做“字符串字面量”,存放在静态区,是受到保护的,若对其进行修改,程序会出错。

*q = *p; 这一句就是要对受保护的地址进行修改。

char q[4] ="ABC"; 这样定义,在栈上定义了一个数组,有3个字符型元素。这个数组中的内容是在栈上的,可以更改,所以运行*q = *p就正确。

热点排行