【发布时间】:2020-09-07 08:46:03
【问题描述】:
所以我是 c99 的新手,所以这个错误可能非常简单,但是,我试图通过 c 脚本 ping 某人,但我不知道如何修复这个错误!我尝试了所有方法,这几乎是我得到的最接近的结果。
这是代码:
#include <cs50.h>
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
char name = get_char("target: ");
char test = get_char("target: ");
char er = get_char("target: ");
char tr = get_char("target: ");
printf("%c.%c.%c.%c\n", name, test, er, tr);
system("ping %c.%c.%c.%c\n", name, test, er, tr);
return 0;
}
这是我编译时遇到的错误:
**ping.c:13:34: error: too many arguments to function call, expected single argument '__command', have 5 arguments
system("ping %c.%c.%c.%c\n", name, test, er, tr);
~~~~~~ ^~~~~~~~~~~~~~~~~~
/usr/include/stdlib.h:781:1: note: 'system' declared here
extern int system (const char *__command) __wur;
1 error generated.
<builtin>: recipe for target 'ping' failed
make: *** [ping] Error 1**
【问题讨论】:
-
您需要构造您希望传递给
system的字符串。试试sprintf。 -
另外,您可能希望 IP 地址由十进制或十六进制格式的整数组成,而不是字符。
-
欢迎使用 StackOverflow!错误消息确切地告诉您问题出在哪里。 system() 只接受 one 参数,而不是您给出的五个参数。请在使用它们之前查看您正在使用的函数,或者至少在编译器抱怨它们时查看它们。
-
请注意,使用字符串连接构建传递给
system()的字符串是严重安全漏洞的常见来源。你真的不应该这样做。 -
考虑使用
posix_spawn而不是system();您可以直接将 argv 列表传递给 ping,因此没有解释字符串的 shell(因此您需要担心其中一个参数是$(rm -rf ~)或攻击者可以合理期望用来控制的其他内容您的系统)。