好吧,这可能听起来很愚蠢,但我无法找到一种方法将int / char传递给这个系统调用
这是我希望它如何工作
system ("cal %d %d", month, year);
我希望这会在终端“cal 3 2009
”
终端将显示2009年3月的日历。
但是编译器抱怨它有太多的参数
任何想法?我需要让这个方法system ("cal ")
给我一个动态日历。
注意:cal
接受参数cal month year
答案 0 :(得分:8)
您需要构建正确的命令行字符串,system()
不会为您执行此操作:
char cmd[64];
snprintf(cmd, sizeof cmd, "cal %d %d", month, year);
system(cmd);
关于buffer overflow的常见警告适用,但在这种特殊情况下,当两个参数都是整数时,您应该相当安全。
答案 1 :(得分:3)
基本上,只需从系统调用中执行printf操作:
char my_cmd[MAX_SIZE];
snprintf(my_cmd, MAX_SIZE, "cal %d %d", month, year);
system(my_cmd);
答案 2 :(得分:1)
您需要传递已经完成所有必要转换的字符串。您可以使用sprintf()来生成这样的字符串,只需要小心分配足够大的缓冲区。
答案 3 :(得分:1)
这是因为您假设系统行为类似于printf,而事实并非如此。 要获得所需,首先要通过sprintf获取替换到缓冲区,然后将此缓冲区传递给系统。
但要小心,这可能会成为潜在的安全漏洞,因为您可能会在命令行执行时传递未知参数。此外,您必须要小心,您使用的临时缓冲区足以容纳最终字符串。
答案 4 :(得分:1)
试
#include <stdlib.h>
#include <stdio.h>
int main()
{
char command_buf [20];
const int month = 3;
const int year = 2009;
snprintf(command_buf, sizeof(command_buf), "cal %d %d", month, year);
system(command_buf);
}
答案 5 :(得分:0)
在使用它调用系统之前,必须在字符串中格式化命令,使用snprintf实例
答案 6 :(得分:0)
char
string[64];
sprintf( string, "cal %d %d", month, year );
system( string );