0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

学益得智能硬件 来源:学益得智能硬件 2023-03-31 09:41 次阅读

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

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

char s1[] = "helloworld";
初学者容易写成这样:
chars1[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指向一块堆空间:


c38f3566-cee4-11ed-bfe3-dac502259ad0.png  

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


c3c4c3a2-cee4-11ed-bfe3-dac502259ad0.png  


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

c405e67a-cee4-11ed-bfe3-dac502259ad0.png  


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


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

c488e098-cee4-11ed-bfe3-dac502259ad0.png  

审核编辑:汤梓红

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

    关注

    180

    文章

    7604

    浏览量

    136673
  • 字符串
    +关注

    关注

    1

    文章

    578

    浏览量

    20505
  • 指针
    +关注

    关注

    1

    文章

    480

    浏览量

    70549
  • 编译
    +关注

    关注

    0

    文章

    657

    浏览量

    32851
  • 数组
    +关注

    关注

    1

    文章

    417

    浏览量

    25939

原文标题:C语言定义字符串的几种方法

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言进阶】如何灵活利用宏定义字符串转换

    如何使用C语言的宏定义转换字符串
    的头像 发表于 08-29 08:51 7997次阅读
    【<b class='flag-5'>C</b><b class='flag-5'>语言</b>进阶】如何灵活利用宏<b class='flag-5'>定义</b>做<b class='flag-5'>字符串</b>转换

    C++字符串string

    string是C++编程语言中的字符串。在C++中字符串处理可以使用c
    的头像 发表于 07-10 00:26 1271次阅读
    <b class='flag-5'>C</b>++<b class='flag-5'>字符串</b>string

    C语言教程之字符串替换

    C语言教程之字符串替换,很好的C语言资料,快来学习吧。
    发表于 04-25 15:49 0次下载

    C语言教程之回文字符串

    C语言教程之回文字符串,很好的C语言资料,快来学习吧。
    发表于 04-25 15:49 0次下载

    C语言教程之字符串加密和解密

    C语言教程之字符串加密和解密,很好的C语言资料,快来学习吧。
    发表于 04-25 15:49 0次下载

    C语言字符串转数字实现方法

    C/C++语言中没有专门的字符串变量,通常用字符数组来存放字符串
    发表于 11-14 17:50 1.3w次阅读

    C语言字符串匹配和数据提取源码

    C语言字符串匹配与数据提取源码
    的头像 发表于 02-27 15:42 2390次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>字符串</b>匹配和数据提取源码

    C语言字符串拷贝函数有几种方法

    strcpy,即string copy(字符串复制)的缩写。 是C语言标准库中实现字符串拷贝的一个函数。 各大公司笔试题最喜欢考的一道题,快来看看,你会
    的头像 发表于 03-12 14:16 4765次阅读

    C语言编程字符串函数汇总资源下载

    C语言编程字符串函数汇总资源下载
    发表于 04-15 16:18 9次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>编程<b class='flag-5'>字符串</b>函数汇总资源下载

    C语言总结_字符串全方位练习

    C语言字符串全方位练习,涉及知识点:字符串解析、大小写判断、字符串插入、字符串删除、
    的头像 发表于 08-14 09:41 1484次阅读

    C语言-字符串处理

    字符串C语言里使用非常多,因为很多数据处理都是文本,也就是字符串,特别是设备交互、web网页交互返回的几乎都是文本数据。 这篇文章就介绍字符串
    的头像 发表于 08-14 10:05 1746次阅读

    字符串类型以及C++语言布尔类型

    C风格字符串;char+变量名+[ ]=”字符串值” (可以随便定义变量名,也就是用变量名代替某一大
    的头像 发表于 02-21 15:40 1066次阅读
    <b class='flag-5'>字符串</b>类型以及<b class='flag-5'>C</b>++<b class='flag-5'>语言</b>布尔类型

    C语言字符串的引用方式

    C语言程序中,字符串是存放在字符数组中的。 2. 用字符数组存放一个字符串,可以通过数组名和
    的头像 发表于 03-10 14:57 1904次阅读

    c语言字符串定义

    字符串定义、初始化、操作和常见问题。 字符串定义和初始化 在C语言中,
    的头像 发表于 11-24 10:02 1929次阅读

    C语言字符串编译函数介绍

    C语言中,字符串实际上是使用null字符O'终止的一维字符数组。因此,一个以null结尾的
    的头像 发表于 03-07 16:18 500次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>字符串</b>编译函数介绍