当前位置: 首页 > news >正文

不可忽略的字符串终止符

业务情景1

先来看以下代码的定义是否有错误

unsigned char iv[10] = "0123456789"

输出
error: initializer-string for array of chars is too long [-fpermissive]

为什么会错误呢?明明数组长度是10,字符串长度也是10,应该刚刚好才对啊!
问题就出在字符串的终止字符也占一个字节。

"0123456789" 应当占11个字节。字符串最后还要添加转义字符。

正确的定义:

//方式一:
unsigned char iv[11] = "0123456789" ;//方式二:
unsigned char iv[] = "0123456789" ;

业务情景2

在 C 语言中,字符串是以 空字符 \0 作为终止符的(即字符串的结尾必须是 \0)。如果字符串没有终止符,printf、strlen 等字符串处理函数会无法判断字符串的结束位置,从而导致 越界访问,读取到内存中无关的垃圾数据,直到意外遇到 \0 才停止。

示例代码:

#include <stdio.h>int main() {// 情况1:正常字符串(带终止符\0)char str1[] = "hello";  // 等价于 {'h','e','l','l','o','\0'},自动添加\0printf("正常字符串: %s\n", str1);// 情况2:无终止符的字符串(手动初始化,不添加\0)char str2[5] = {'w', 'o', 'r', 'l', 'd'};  // 长度为5,没有\0printf("无终止符的字符串: %s\n", str2);return 0;
}

输出结果
正常字符串: hello
无终止符的字符串: world�8� // 末尾多出随机垃圾字符

原因分析:

1.str1 是正常字符串,编译器会自动在末尾添加 \0,printf 遇到 \0 后停止输出,结果正确。

2.str2 没有终止符,printf 会从 str2 的首地址开始读取,直到在内存中随机位置遇到 \0 才停止。因此输出结果会包含 str2 的有效字符(world),后面跟着内存中无关的垃圾数据.

注意

这种越界访问属于 未定义行为,可能导致程序崩溃或数据泄露,实际开发中必须确保字符串以 \0 结尾。
若需手动初始化字符串,需显式添加 \0,例如:char str2[6] = {'w','o','r','l','d','\0'};。

http://www.sczhlp.com/news/73133/

相关文章:

  • 怎么完整下载网站模板广告牌
  • 小公司做网站需要注意什么问题网站设计太原
  • 美丽乡村建设网站php源码wordpress xml地图
  • 做网站最多的行业南宁seo
  • 在线软件开发平台seo信息编辑招聘
  • 网站建设维护书快速整站优化
  • 网站交互主要做什么网站开发的框架
  • 代驾网站开发关于做视频网站的一些代码
  • 网站扁平化设计理念深圳做网站建设的哪家效果好又便宜
  • 带音乐网站模板优化营商环境评价
  • 网站后台添加内容网页不显示wordpress+漂亮的博客
  • 做视频网站用什么开发大连市城市建设管理局网站
  • 熊猫头表情包制作网站天津建设工程信息网电脑版登录
  • 分销网站怎么做长沙网站推广公司
  • 供求信息网站开发背景宁波外贸建站公司
  • 怎么用linux做网站服务器计算机学校全国排名
  • 微网站模板源代码dede手机网站模板
  • 网页视频怎么下载高清找人做网站排名优化
  • 广州网站建设网络推广企业网站代码怎么优化
  • 重庆建设造价信息网站精品网站建设费用 干净磐石网络
  • vs中做网站设置背景图片什么网站做装修公司广告比较好
  • 盂县在线这个网站是谁做的安康市相亲平台
  • 如何修复 iPhone 的 UI 界面突然变大,导致 iOS UI 无法正常操作使用的问题 All In One
  • 网站模板如何删除wang域名 网站
  • 易点科技网站建设部署iis网站
  • python做的网站如何打开甘肃路桥建设集团网站
  • 东莞浩智网站建设多少钱重庆公积金门户网站
  • 本地服务器域名解析网站建设app开发 wordpress
  • 网站开发需要什么基础知识徐州网站外包
  • 泉州网站建设定制做网站接单