2015-06-20 543 views
-2

这个问题是从破解编码面试书,问题状态 - 写一个程序来反向空终止的字符串;这个术语只存在于C/C++中吗? “null terminated string”和Java中常用的字符串有什么区别?什么是空字符串?

+1

https://en.wikipedia.org/wiki/Null-terminated_string – ultranaut

+0

我建议避免使用术语“C/C++”。 C和C++是两种不同但密切相关的语言。只要说“C和C++”或“C或C++”即可。 –

回答

0

以空字符结尾的字符串是由NUL字符(ASCII码0)终止的字符串。在C中,没有字符串数据类型。你有字符。那么你如何制作一个字符串呢?那么它基本上只是一个字符数组!现在,这里的乐趣。所以在OO语言中,像Java数组是具有Length或Count属性或类似的东西的对象(名称因语言/实现而异)。在C中,它只是一个字符列表。那么,我们怎么知道我们已经达到了字符串的末尾呢?当我们遇到NUL字符时(字节值为0)。这让我们知道我们正处在字符串的末尾。

说到OO语言,它们可能以NUL结尾(或提供一种方法来检索C兼容的以null结尾的版本),但它们可能不是因为它们可以使用内部的Length/Count变量来保留跟踪字符串的长度。另外,我会说你比C/C++更“C”,因为在C++中,你有std :: string类,它比Java中的字符串更像C中的字符串。

+0

'NULL'是一个空指针常量。为避免混淆,请不要使用该名称来引用空字符。 'NUL'是空字符的通用名称 - 或者只是将其称为''\ 0''。 –

+0

谢谢。纠正。这是一个自动更正的替代品:) – dman2306

1

以null结尾的字符串是由空字符('\0')字符结尾的字符串(一系列字符)。

C标准一个定义为(引用[N1570])http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)7.1.1),为:

是由封端的字符的连续序列,并且包括第一个空字符。

其中空字符是一个值为0一个字符(不与数字'0'混淆)。

C标准库中的许多函数需要的参数是指向字符串(定义为指向字符串的初始字符的指针)的指针。如果使用一个参数来调用这样一个函数,该参数是一个指向字符数组元素的指针,但该数组不包含空字符,则行为是未定义的。该函数可能会读取超出数组末尾的内存,直到碰巧到达内存中的0字节,或者直到它崩溃。

这是表示任意长度字符串的几种方法之一。另一种方法是将字符串的长度与其内容一起存储为整数。某些版本的Pascal在字符串的开头使用一个字节长度,将最大长度限制为255字节。

C++,它继承及其标准库的C'S的定义,也有实现std::string,更抽象的类型,可以让你对字符串,而不必担心他们是如何操作表示库类。我对Java的字符串类型不太熟悉,但我认为它是相似的。一个好处是你可以在字符串中间有空字符;另一个是你可以在不搜索空终止符的情况下确定长度。

相关问题