生信人

找回密码
立即注册
搜索
热搜: 活动 交友 discuz
发新帖

0

收听

12

听众

318

主题
发表于 2024-5-16 16:55:44 | 查看: 698| 回复: 0

背景

char a[5]={'s','h','a','r','k'};
printf("%s\n",a);

输出

shark烫烫烫?"7#T?

char a[5]={'s','h','a','r','\0'};
printf("%s\n",a);

输出则为shar

原因

在C语言中,一个字符串是以'\0'(空字符)结尾的字符数组。当我们使用字符串格式化输出时,例如使用printf("%s\n", a),程序会从数组a的起始位置开始输出字符,直到遇到'\0'为止。

在第一个代码片段中,数组a的长度为5,但是没有显式地在最后一个字符后面添加'\0',因此在打印输出时,会一直输出到最后一个字符('k')为止,然后继续向后输出数组中的内存内容,直到遇到内存中的'\0'为止。因此会输出"shark",然后继续输出随机的内存内容,导致输出为"shark烫烫烫?"7#T?"。

而在第二个代码片段中,在数组a的最后一个字符('r')后面显式地添加了'\0',因此在打印输出时,会输出从数组起始位置到遇到'\0'为止的内容,即"shar"。

收藏回复 显示全部楼层 道具 举报

您需要登录后才可以回帖 登录 | 立即注册

QQ|Archiver|手机版|小黑屋|生信人 ( 萌ICP备20244422号 )

GMT+8, 2024-11-21 15:08 , Processed in 0.089475 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表