嵌入式技术论坛
直播中

晓白嵌入式

8年用户 727经验值
擅长:嵌入式技术
私信 关注
[经验]

指针到底能不能修改其指向的字符串?

指针到底能不能修改其指向的字符串?http://bbs.edu118.com/forum.php?mod=viewthread&tid=473&fromuid=204
(出处: 信盈达IT技术社区)

很多同学都喜欢做这样的事情,定义一个指针指向字符串,然后在作为参数传递到子函数中去,结果发现报错了,例如以下的代码     其目的是做一个字符串中删除一个字符时,直接使用指针来修改字符串常量的值
  
  • #include
  • void Move(char*p,char n)
  • {
  •     int i=0 ,j=0 ;
  •     while(*(p+i))
  •     {
  •         if(*(p+i)==n)
  •         {
  •             for(j=i;*(p+j)!='';j++)
  •                 *(p+j)=*(p+j+1);
  •             break;
  •         }
  •         i++;
  •     }
  • }
  • int main()
  • {
  •     char *str="abcdefghi" ;
  •     Move(str,'c') ;
  •     printf("%s",str) ;
  •     return 0 ;
  • }



运行时出现错误,代码崩溃,如下图所示:
        这是因为指针str指向常量字符串(位于常量存储区),常量字符串的内容是不可以被修改的,企图修改常量字符串的内容而导致运行错误。所以这个问题出现的原因是char*str=abcdefghi,
赋值的是字符串常量,存储在常量存储区,而常量存储区的内容是无法修改的。
   如果使用数组来代替的话,数据就存储在堆栈空间,堆栈空间的内容是可以修改的,就不会出现运行时错误。
   
  • #include
  • void Move(char*p,char n)
  • {
  •     int i=0 ,j=0 ;
  •     while(*(p+i))
  •     {
  •         if(*(p+i)==n)
  •         {
  •             for(j=i;*(p+j)!='';j++)
  •                 *(p+j)=*(p+j+1);
  •             break;
  •         }
  •         i++;
  •     }
  • }
  • int main()
  • {
  •     char str[]="abcdefghi" ;
  •     Move(str,'c') ;
  •     printf("%s",str) ;
  •     return 0 ;
  • }




回帖(1)

晓白嵌入式

2017-8-23 10:10:45
深入学习交流加我qq***.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分