为什么`std :: env :: args`返回`String`的迭代器而不是`&' static str`?

时间:2018-02-20 00:45:26

标签: rust

我从操作系统类中记得的是,至少在我们正在处理的操作系统中,命令行参数存储在进程的某个地方。地址空间。如果是这种情况,那么std::env::Args不能成为&'static str的迭代器吗?或者,如果字符串的编码不一定是UTF-8并且依赖于操作系统,那么std::env::ArgsOs上的&'static OsStr不能成为迭代器吗?

1 个答案:

答案 0 :(得分:4)

  

[...]至少在我们正在开发的操作系统中[...]

这是你的答案。仅仅因为一个操作系统将命令行参数存储在内存中,并不意味着它们所有都可以。更重要的是,他们说的是以str期望的完全相同的格式存储它们?

这个简单的例子是Windows,其中命令行是从函数调用返回的单个可能无效的UTF-16字符串:无法将转换为{{1 }}

因此,API旨在返回一个拥有的字符串,因为它必须在各个平台上保持一致,并且它不知道它可能需要做什么才能将命令行参数变为可用的格式。