将参数传递给C中的子函数

时间:2017-04-23 16:01:13

标签: c

一个简单的问题,但不知怎的,我无法找到解决方案,

我想基本上传递,在我的程序中,我的一个参数是发送程序输出所需的文件。

在main()中设置它并不是一个真正的问题但是,我想知道如何在非主要的函数中处理argv []。

我试过这样:

    void print_ip(struct arp* arp, char* argv[]){
       char *myfile = argv[2];
       if ( strlen(argv[2]) <= 0 ){
        printf("ERROR: Please specify a proper interface \n");
       }
       else {
        strcpy(myfile, argv[2]);
       }

       f = fopen(myfile, "w");
       if (f != NULL){
         printf("Found an IP address \n");
         fprintf(f, "\t<ipv4>%s, %s</ipv4>", arp->ipv4_destination, arp->ipv4_source);
       }
       else {
        printf("ERROR: Failed to open file \n");
        exit(1);
       }
    }

此功能有效,唯一的问题是当我尝试从其他地方启动该功能时

例如

   void arp_scan(struct arp*, int bsd_socket){
     ... code ...
     print_ip(&arp, argv);
   }

我收到以下错误:

  

scanner.c:在函数'arp_scan'中:scanner.c:187:25:错误:'argv'   未申报(首次使用此功能)        print_ip(&amp; arp,argv);

当然,除了在每个函数中声明char * argv []之外,必须有一种方法可以将它从一个函数中移植到另一个函数

1 个答案:

答案 0 :(得分:0)

只有main可以接受来自命令行(argv)的参数。如果要将这些命令行参数传递给函数,则需要将它们作为参数传递。

#include <stdio.h>

int passingvars(int argc, char **argv)
{
    int i = 0;
    while (i < argc)
    {
        printf(argv[i]);
        i++;
    }
}

int main(int argc, char *argv[])
{
    passingvars(argc, argv);
    return 0;
}