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

Mic*_*son 5 rust

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

DK.*_*DK. 5

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

这就是你的答案。仅仅因为一个操作系统将命令行参数字面存储在内存中,并不意味着它们这样做。更重要的是,怎么说他们以与str预期完全相同的格式存储它们?

一个简单的例子是 Windows,其中的命令行是从函数调用返回的单个可能无效的 UTF-16 字符串:无法将其转换为&'static str.

因此,API 旨在返回一个拥有的字符串,因为它必须跨平台保持一致,并且它不知道如何将命令行参数转换为可用格式。

  • 它确实如此,但它的工作原理是 C 运行时在调用 main 之前解析命令行。这是一个兼容性垫片,而不是从操作系统的角度来看它的本机工作方式。 (4认同)