从命令行将变量参数传递给C程序

时间:2013-11-15 11:15:12

标签: c command-line-arguments

/* test1.c */
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int m = 11;
    system("./test2 m");
    return 0;
}

上面的程序打印0,而我希望打印11。

/* test2.c */
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int m = atoi(argv[1]);
    printf("%d\n", m);
    return 0;
}

有人可以提供解释吗?还有什么是正确的方式来打印所需的11?

3 个答案:

答案 0 :(得分:4)

您将字符m传递给命令行,而不是其值。

答案 1 :(得分:3)

C不会像perl那样扩展字符串常量中的变量,因此命令字符串中的m是一个字符串常量。

您需要做的是将m的值打印到命令字符串:

/* test1.c */
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int m = 11;
    char buf[100];
    sprintf(buf, "./test2 %d", m);
    system(buf);
    return 0;
}

答案 2 :(得分:3)

system()函数只接受一个字符串作为参数。它不知道你有一个名为m的变量,并且它应该在字符串中替换该变量(使用这种语法无论如何都不可能在C中。)

这意味着你正在执行你的第二个程序:

 ./test2 m

你的2个程序执行atoi(argv[1]);,它将与atoi("m");相同,这使得atoi()返回0。

您需要构建希望system()执行的字符串

int main(int argc, char *argv[])
{
    char command[128];
    int m = 11;
    sprintf(command , "./test2 %d", m);
    system(command);
    return 0;
}