我在玩Dart琴弦,并注意到了这一点:
print("\x00nullbyte".length);
print("\x00nullbyte");
如果运行此命令,则会发现长度为9,其中包括空字节。但是没有输出。
在编程方面,我比Google更加信任Google工程师,我认为这可能是有原因的。会是什么呢?
最佳答案
Dart字符串的长度为9,并且包含所有9个代码单元。 NUL字符在Dart字符串中完全有效。
但是,它们在C字符串中无效,因为它们标记了字符串的结尾。
打印时,该字符串最终会转换为C字符串,以调用系统库的输出函数。在这一点上,系统库只看到NUL字符,什么也不打印。
尝试:
main() { print("ab\x00cd"); } // prints "ab".
String.length函数完全适用于Dart String对象,并且不会通过C strlen函数。不受C限制的影响。
可以说,Dart打印功能应该可以检测到NUL字符并始终打印其余字符串。
关于string - 空字节停止 `print`而不是 `strlen`,为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21718490/