C语言定义字符串的几种方法

描述

C语言中定义字符串有哪些方法?

  首先是数组,存放在栈区,可读可写,操作起来很方便。

char s1[] = "helloworld";
  初学者容易写成这样:
char s1[32];
s1 = "helloworld";
  不过编译的时候就会提示错误,因为数组名是指针常量,地址不能修改。

  第二种是字符串常量,存放在只读数据区。
char *s2 = "helloworld";
  既然是只读,就是不能修改的意思,非要修改,就是段错误。
s2[0] = 'x';
 

 

编译运行结果:

 

root@Turbo:test# ./test 
Segmentation fault (core dumped)
root@Turbo:test#
第三种先在堆上申请空间,然后用字符串拷贝函数把字符串拷贝进去,用完记得释放空间。
char *s3 = (char *)malloc(128);
strcpy(s3, "helloworld");
free(s3);
  初学者容易写成这样:
char *s3 = (char *)malloc(128);
s3 = "helloworld";
free(s3);
  编译没问题,但是运行的时候,直接异常退出。


  原因就是,本来指针s3指向一块堆空间:


数组  

执行:
s3="helloworld"
语句后,你以为是把字符串赋值给这块堆空间:


数组  


其实是重新给指针s3赋值:

数组  


s3原来指向堆内存,现在指向只读数据区,去释放这块空间,当然是不允许的。


  最后,给大家留一个关于字符串的笔试题,如果你知道答案,欢迎在文章下方留言。

数组  

 

  审核编辑:汤梓红

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分