c - 如何处理 argv 字符数组赋值?

标签 c argv

我发现了两种将命令行参数传递到字符数组的方法:

int main (int argc, char **argv)
{
  const char *s1 = argv[0];
  char s2[256];
  strcpy(s2, argv[0]);

  printf("s1: %s\ns2: %s\n\n", s1, s2);
}

在 AIX 系统上使用 IBM xlc 编译器编译返回

[MyPrompt]> ./a.out

s1: ./a.out

s2: ./a.out

哪个实现(s1 或 s2)是正确的? s1 很好,因为 argv[0] 可以是任意长度。 s2 要求 argv[0] 的长度 < 256 个字符。

我不明白 s1 应该如何/为什么工作。我认为在编译时应该需要 s1 的右侧,但我认为它是在运行时生成的。

最佳答案

s1 工作的原因是因为 argv[0] 的类型一个指针。您只是分配地址(而不是实际值),这是安全的。您没有执行任何类型的分配或转换。

我通常更喜欢第一个选项,因为您应该只读取参数变量。

关于c - 如何处理 argv 字符数组赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1214251/

相关文章:

将字符串数组中的值连接到 c 中的另一个静态字符串

c - 从文件中读取整数并将其保存到数组中

c - 安全地将 SIZE_T 转换为 WORD

c - 更优雅地比较 argv 和字符串文字

c - 无法在 c 中使用 exec 和 makeargv 运行 ./program

c - 为什么for循环后没有大括号

c中main之外的命令行处理

c - 以这种格式将 argv 变量传递给 main 的结果 main( int argc, char const * argv )

c - 无法将 argv[] 中的内容转换为 C 中的 float[][]

c - 使用 argv 元素时出现问题