我发现了两种将命令行参数传递到字符数组的方法:
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/