【问题标题】:Are the elements of the argv array always contiguous in memory?argv 数组的元素在内存中是否总是连续的?
【发布时间】:2014-07-15 18:34:36
【问题描述】:

在 Linux 上,argv 数组的元素似乎总是占据内存中的连续位置,即 argv[n+1] 的第一个字符紧跟 argv[n] 的终止 nul 字节,因为 n = 0.. .(argc-1).

是否保证所有 POSIX 系统/所有 C 实现都是这种情况?

【问题讨论】:

  • 尝试在命令行参数之间添加额外的空格并再次检查。
  • @user3386109:我严重怀疑这会产生什么影响。 对于给定的实现,参数字符串可能会被连续分配,但不能保证(我想不出有什么好的理由依赖它)。
  • @KeithThompson 一种可能的实现是使用strtok 将命令行分解到位。如果命令行以额外空格开头,则参数字符串将不连续。但无论如何,我同意没有保证,也没有充分的理由依赖字符串是连续的。
  • @user3386109: strtok 对于任何合理的 shell 来说都不是一个选项;除其他外,它不会处理引用。

标签: c unix posix


【解决方案1】:

这不能保证。既不是 C 语言,也不是 POSIX 语言。

【讨论】:

  • 实现不是保证数组是连续的内存块吗?如果是这样,那为什么要例外呢?
  • @ManojAwasthi argv 是一个char 指针数组,即char *argv[N]。字符串指针保证在内存中是连续的,而不是字符串。
猜你喜欢
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 2014-02-17
  • 2012-10-17
  • 2021-02-09
相关资源
最近更新 更多