7

我在玩飞镖弦时注意到了这一点:

print("\x00nullbyte".length);
print("\x00nullbyte");

如果你运行它,你会发现长度是 9,其中包括空字节。但是没有输出。

在编程方面,我比我自己更信任谷歌工程师,我认为这可能是有原因的。会是什么呢?

4

1 回答 1

5

Dart 字符串的长度为 9,包含所有九个代码单元。NUL 字符在 Dart 字符串中完全有效。它们在 C 字符串中无效,它们标记字符串的结尾。打印时,字符串最终被转换为 C 字符串以调用系统库的输出函数。此时,系统库只看到 NUL 字符并且什么也不打印。

尝试:

main() { print("ab\x00cd"); }  // prints "ab".

String.length 函数完全作用于 Dart String 对象,不通过 C 的 strlen 函数。它不受 C 语言限制的影响。

可以说,Dart 打印功能应该检测 NUL 字符并打印字符串的其余部分。

于 2014-02-12T15:29:22.300 回答