首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >K&R C-在换行符后添加'\0‘

问K&R C-在换行符后添加'\0‘
EN

Stack Overflow用户
提问于 2014-04-11 01:53:30
回答 4查看 204关注 0票数 1

我正在使用K& R的第二版C编程语言。

在pg上的示例程序中。29,作者创建了一个名为getline()的函数,其目的是计算一行中的字符数,并将'\0'附加到行尾(在换行符'\n'之后)。

我的问题是,你为什么要这么做?你不能根据你有换行符的事实来判断换行符的开始吗?

EN

回答 4

Stack Overflow用户

发布于 2014-04-11 01:58:42

我认为这样做的目的是将文本拆分成行。

在C数据模型中,\0标记字符串的结尾。您可以获得一个由\n表示的包含多行的字符串,但它的末尾将只有一个\0。

如果在每个\n后面都放一个\0,那么实际上就是将字符串拆分成几行,每行对应一个\0-terminated字符串。

票数 3
EN

Stack Overflow用户

发布于 2014-04-11 01:56:15

在C语言中,没有确切的字符串类型(例如,在Java或C#中)。对于C,它只是一个字节序列,直到找到一个0字节。这称为NUL结尾的字符串(不要与NULL常量混淆)或零结尾的字符串。

因此,添加\0是为了使其成为表示一行的有效C字符串,并能够在之后像处理普通C字符串一样对其进行操作(例如使用strlen函数)。如果不附加\0,字符数将会错误,因为您不知道字符串的结束位置。为了说明这一点,这里有一个例子:

如果看一下内存中包含"Hello“的C字符串,我们会发现:

代码语言:javascript
复制
48 65 6C 6C 
6F 00 A4 00

48 65 6C 6C 6F是"Hello",加上一个00字节(\0)来终止它。所以为了计算有多少个字符,我们只计算字节数,直到一个00字节结束它,也就是5个字节(5个字符)。

如果不对字符串进行零终止,那么就无法知道字符串有多少个字符。对于非零终止的"Hello“字符串,内存将如下所示:

代码语言:javascript
复制
48 65 6C 6C 
6F A4 00 FF

正如您所看到的,没有办法知道字符串的结束位置,因此,不可能计算它有多少字节。

票数 1
EN

Stack Overflow用户

发布于 2014-04-11 01:58:59

\0字符的出现与newline无关(在二进制流中并不总是\n -请参阅Keith Thompson的注释)。

换行符用于屏幕格式化(根据平台,用换行符和/或回车符以二进制表示);而\0用于标记字符串的结尾,在C中,字符串只是一个字符数组,没有固有的结尾。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22995493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档