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原来指向堆内存,现在指向只读数据区,去释放这块空间,当然是不允许的。
最后,给大家留一个关于字符串的笔试题,如果你知道答案,欢迎在文章下方留言。


机器学习的突飞猛进,这些进步很可疑
WoToken打造一个能理财的数字资产钱包
科学家研发便携式自动ME-LTE仪器,可帮助检测火星搜寻生命
联想官宣小新Air14 2020款即将发布 将搭载10nm第十代英特尔酷睿处理器
5G与北斗导航的联合作用下,将推动我国汽车产业实现弯道超车
C语言定义字符串的几种方法
can 以太网 网关能否在汽车上应用?
详解双模智能手机的设计技术
断电延时继电器接线图_断电延时继电器接法
聚焦“新基建”|汽车电子行业电源应用解析
激光传感器的脉冲仿真测试方案分析
探究亚马逊构建的机器人仓储帝国雏形!
联域光电深主板IPO受理!主打LED照明产品,募资6.59亿扩产及布局特种照明领域
人机交互的发展历程
6位编码交流电源开关
linux驱动开发_文件系统本地挂载
采集设备不能通讯怎么办 多通道振弦采集仪数采仪
三款流水灯控制电路图分享
分板机趣谈
TDA4565引脚功能的电压资料参数