"以零结束"是什么意思?

num*_*l25 11 c c++ string

我正在进入C/C++,很多术语对我来说都是不熟悉的.其中一个是由零终止的变量或指针.内存中的空间被零终止是什么意思?

Ric*_*dle 16

HiASCII格式取字符串.它在内存中最简单的表示是两个字节:

0x48
0x69
Run Code Online (Sandbox Code Playgroud)

但那段记忆在哪里结束?除非你还准备传递字符串中的字节数,否则你不知道 - 内存块本身没有长度.

所以C有一个标准,字符串以零字节结束,也称为NUL字符:

0x48
0x69
0x00
Run Code Online (Sandbox Code Playgroud)

字符串现在明确地两个字符长,因为前面有两个字符NUL.


Ric*_*ett 14

它是一个保留值,用于指示字符串中(例如)字符序列的结尾.

更正确地称为null(或NUL)终止.这是因为使用的值为零,而不是'0'的字符代码.为了澄清区别,请查看ASCII字符集的表格.

这是必要的,因为像C这样的语言具有char数据类型,但没有string数据类型.因此,由devleoper决定如何在其应用程序中管理字符串.通常的做法是使用一个char带有空值的s 数组来终止(即表示结束)字符串.

请注意,字符串的长度与最初声明的char数组的长度之间存在区别.

char name[50];
Run Code Online (Sandbox Code Playgroud)

这声明了一个包含50个字符的数组.但是,这些值将是未初始化的.因此,如果我想存储字符串"Hello"(长度为5个字符),我真的不想打扰将剩余的45个字符设置为空格(或其他一些值).相反,我在我的字符串中的最后一个字符后存储NUL值.

更新的语言,如Pascal,Java和C#都string定义了特定的类型.它们具有标题值以指示字符串中的字符数.这有几个好处; 首先,您不需要走到字符串的末尾来查找其长度,其次您的字符串可以包含空字符.

维基百科在字符串(计算机科学)条目中提供了更多信息.


Ass*_*vie 5

以零终止

这是你的尖发老板解雇你的时候。