/* 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?
答案 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;
}