空字节为`print`而不是`strlen`停止,为什么?

时间:2014-02-12 04:13:31

标签: string dart nul

我正在玩Dart琴弦并注意到这一点:

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

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

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

1 个答案:

答案 0 :(得分:2)

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

尝试:

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

String.length函数完全在Dart String对象上运行,并且不通过C strlen函数。它不受C限制的影响。

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