编辑:解决方案可能在页面底部。我用解决方案回答了我的问题。我希望这对其他人有所帮助。
我在linux中遇到了一个小问题。我正在编写一个简单的端口扫描,但我遇到了接受参数的函数的问题。
我将解释代码:
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
//this function handle the arguments.
char* ret[2]= {"NULL","NULL"}; //declaring this in global because of segmention fault?
char** arguments_handle(int argc,char **arg)
{
if(argc!=5)
{
printf("Usage:./file -p PORT-RAGE -h HOST.IP\n");
exit(1);
}
//make sure the user type the correct arguments. in this case just -h and -p
if(strcmp(arg[1],"-p")==0 || strcmp(arg[1],"-h")==0 && strcmp(arg[3],"-p")==0 || strcmp(arg[3],"-h")==0)
{
//if in the arguments we got -h or -p run this
//if is -p
if(strcmp(arg[1],"-p")==0)
{
//take the next argument in this case is the port range and put in our array
strcpy(ret[0],arg[2]);
}
else
{
strcpy(ret[1],arg[2]);
}
if(strcmp(arg[3],"-h")==0)
{
//now for the -h
strcpy(ret[1],arg[4]);
}
else
{
strcpy(ret[0],arg[4]);
}
}
return ret;
}
int main(int argc, char **argv)
{
char** ipnport;
ipnport = arguments_handle(argc,argv);
printf("IP is :%s port range is %s\n",ipnport[0],ipnport[1]);
//the rest of the code about port scan goes here. I'm just cutting
return 0x0;
}
这里的问题是我可以正确编译,但我遇到了分段错误。我看不出我哪里错了。我想这是关于处理缓冲区或堆栈溢出的事情。
所以我在这个函数中所做的是获取 argv 并将其发送到 arguments_handle 函数。这样做的目的是查看参数“-p”和“-h”以及“存储”在哪里以正确的顺序存储在一个 char 数组中。像这样的字符:“指向包含字符数组的这个数组的字符指针”
pointer pointer pointer
pointer to this-> ["firstarg","secondarg","etc"]
在这种情况下,“指针指针指针”将是字符串的第一个字符。
总结:我想创建一个字符串数组并将其从 arguments_handle 返回到主函数。
有任何想法吗?:)
真挚地,
整数3