网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月10日漏签0天
c语言吧 关注:798,970贴子:4,358,489
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 22回复贴,共1页
<<返回c语言吧
>0< 加载中...

求助:不理解 ‘字符串最后一个字符替换空字符’ 。

  • 只看楼主
  • 收藏

  • 回复
  • 参谋本部
  • 低能力者
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我是一名C语言初学者,现在零散学习到了字符串相关内容。目前我所遇到的困难是:定义一个字符串 char name[25],name[strlen(name) - 1] = '\0',我对这两句代码表现出不理解。
问题如下:
a. 所定义的25位的字符串name,是否是24位有效位宽+1位空字符?
b. strlen(name)是否等于25,还是说依赖于name的实际长度,例如,我输入‘Hello'只占用了5位,因此strlen(name)=5?
c. name[strlen(name) - 1] = '\0' 这句话是将字符串最后一位替换成空字符,通过搜索资料发现,字符串最后自带一个空字符,所以这个操作的目的是什么?
**************
希望能够大神的解答,谢谢!


  • GTA小鸡
  • 吧主
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
name[strlen(name)-1] = '\0'是将字符串截短一位。strlen(name)返回name指向的字符串长度,strlen(name)-1是字符串的最后一个字符下标。


2025-08-10 21:53:05
广告
不感兴趣
开通SVIP免广告
  • 小明ah
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • baisai
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你这是数组,字符串是常量,你这是变量,因为字符串都是以\0结束的,所以给数组最后一个元素安排了\0,当使用%s输出这个数组的时候遇到\0就知道到末尾了


  • 伊森Y亨特
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一楼这两行连续的代码有问题吧。你都不知道它是字符串,怎么能用strlen求长度呢?
你用strlen求长度,说明知道它是字符串,它已经是字符串的话,最后一位写0不是多余?


  • 万事皆有因果
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
char name[25]是声明一个长度为25的字符组,并不是定一一个字符串。
注意声明和定义并不是一个意思,定义是用define保留字来通知编译器两个东西等效,而声明是通过类型和名称来通知编译器这是个变量后边程序会用到。
一些半桶水的编程(人?)没学过编译原理,总是把声明和定义搞混,实际上某些逻辑很严谨的计算机语言,声明必须用declare关键字,定义必须用define关键字,因为编译器对它们是进行完全不同的处理。
定义的话,编译器直接一个替换就搞定,不需要考虑其它,而声明编译器是要记录它的类型、数据长度、有效范围、访问权限、继承属性等一大堆的信息,然后配上一个地址供程序其它代码进行访问,要比定义复杂的多。更具体细节,自己写个编译器就全能搞懂了。


  • __2030
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
字符串实际上和数组没有那么多差别,就看你怎么用而已。数组也可以存放字符串,并且在很多情况下就是这样用的。只不过默认情况下,处理数组是根据你定的长度处理,而字符串是根据内容获得的长度去处理,所以就看你怎么用。而如果字符串没有特殊标识做限界,那他和数组处理方式一样了,那么你还是要多知道一个具体的有效长度才能处理,不然就容易处理越界。
1,如果定义的是数组是存放字符串的,那么就是24字节空间+一个\0。
2,你的strlen要在它放了东西之后才能用,不然很不准确,这样求出来的是你放的有效字符串的长度,不包括\0,如果是hello就是5。
3,加\0就是告诉计算机(编译器),我存放的字符串就这么多字符,到这就结束了,后面的别管我你没有用,都不是这个字符串的内容了(你可以用后面的空间,但是和前面的内容是两个字符串了,需要你另作处理,机器识别的就到\0)。


  • 参谋本部
  • 低能力者
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 22回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示