我在玩飞镖弦时注意到了这一点:
print("\x00nullbyte".length);
print("\x00nullbyte");
如果你运行它,你会发现长度是 9,其中包括空字节。但是没有输出。
在编程方面,我比我自己更信任谷歌工程师,我认为这可能是有原因的。会是什么呢?
Dart 字符串的长度为 9,包含所有九个代码单元。NUL 字符在 Dart 字符串中完全有效。它们在 C 字符串中无效,它们标记字符串的结尾。打印时,字符串最终被转换为 C 字符串以调用系统库的输出函数。此时,系统库只看到 NUL 字符并且什么也不打印。
尝试:
main() { print("ab\x00cd"); } // prints "ab".
String.length 函数完全作用于 Dart String 对象,不通过 C 的 strlen 函数。它不受 C 语言限制的影响。
可以说,Dart 打印功能应该检测 NUL 字符并打印字符串的其余部分。