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