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

    文章

    7530

    浏览量

    128723
  • 字符串
    +关注

    关注

    1

    文章

    551

    浏览量

    20126
  • 指针
    +关注

    关注

    1

    文章

    473

    浏览量

    70362
  • 编译
    +关注

    关注

    0

    文章

    615

    浏览量

    32392
  • 数组
    +关注

    关注

    1

    文章

    409

    浏览量

    25595

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    C语言字符串函数详解

    , int c);查找字符c字符串string中首次出现的位置, NULL结束符也包含在查找中.返回一个指针, 指向字符
    发表于 06-23 23:33

    如何设置字符串中的字符根据不同条件显示不同颜色?如何将不同颜色的字符串合并显示后保留字符串原来的颜色?

    labview中如何设置所显示的字符串中的字符根据不同的条件显示不同的颜色呢?不知道字符字符串中位置的原因,使用属性节点中文本位置的那种方法
    发表于 09-25 00:35

    socket发送字符串出错

    socket发送字符串时出现图中所示空格,请问怎样才能去除,字符串类型是通过C语言定义的无符号整形。
    发表于 05-15 12:04

    Python字符串的特点和修改字符串的常见四种方法

    Python中修改字符串几种方法
    发表于 02-26 16:52

    什么是指向字符串指针?

    组成的句子,在C语言中被称为“字符串”。  了解完字符串是由多个字符组成的之后,想要存储字符串
    发表于 03-15 14:19

    C语言是如何实现字符串大小与字符串比较的函数

    C语言实现字符串比较(非库函数)今天在keil上写代码时,使用strlen和strcmp一直会有警告,所以就有了下面的东西,自己写一个判断数组大小和字符数组比较的代码。仅供参考。kei
    发表于 07-14 06:40

    请问C语言中将数字转换为字符串方法是什么?

    请问C语言中将数字转换为字符串方法是什么?
    发表于 10-19 08:36

    嵌入式C语言字符串字符指针的相关资料分享

    C语言字符串字符指针  今天在写嵌入式代码时,遇到了个易错的,关于嵌入式CCC语言字符串
    发表于 12-15 08:05

    字符串逆序的方法分享

    分享一道经典的C语言题目。题目:字符串逆序。如:hello world转换为dlrow olleh。流程图:代码:左右滑动查看全部代码>>>/*-程序功能:字符串...
    发表于 02-28 07:17

    c语言如何对比字符串是否相同?

    c语言如何对比字符串是否相同把一个字符串变量直接赋值给另一个变量怎么实现
    发表于 11-02 07:45

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

    在C/C++语言中没有专门的字符串变量,通常用字符数组来存放字符串字符串是以“\0”作为结束符。C/C++提供了丰富的
    发表于 11-14 17:50 1.3w次阅读

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

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

    C语言-字符串处理

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

    c语言字符串定义

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