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