搜索文件时函数 main() 的参数

Posted

技术标签:

【中文标题】搜索文件时函数 main() 的参数【英文标题】:Arguments of function main() in searching files 【发布时间】:2018-06-27 13:42:30 【问题描述】:

我编写了一些代码来搜索给定文本文件中的字符串。当没有给出论点时,您会收到信息,它会返回一条信息,您应该至少给出一个论点。如果您只给程序一个参数,即字符串来查找,则必须编写要搜索的文件数。下一步是为这些文件提供路径。问题是当你写多个时。仅搜索最后一条路径。第一个循环表明路径分配得当,但循环后的 printf 表明出现了错误。我应该在这段代码中改变什么? 下面添加的代码。 非常感谢您的帮助。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
    if(argc==1)
        printf("No arguments given"); 
        return -1;   
    else if(argc==2)
        int i=1,path_quantity=0;
        while(path_quantity==0)
        printf("How many path will you given:\n");
        scanf("%d",&path_quantity);
        
        char path[30];
        int c;
        for(i;i<=path_quantity;i++)
            printf("Give path numver %d:\n",i);
            scanf("%30s",wyraz);
            fflush(stdin);
            argv[1+i]=path;
            printf("%s\n",argv[1+i]);

        
        printf("0: %s 1: %s 2: %s 3: %s 4: %s\n",argv[0],argv[1],argv[2],argv[3],argv[4]);

        int j;
        for (j=2; j<path_quantity+2; j++)
        FILE *f= fopen(argv[j], "r");
        if(!f) 
            perror("Can't open file\n");
            return EXIT_FAILURE;
        
        char *line = NULL;
        size_t len = 0;
        ssize_t nread;
        while ((nread = getline(&line, &len, f)) != -1) 
            char *occur = strstr(line, argv[1]);
            if(occur != 0)         
                printf("%s", line);
            
        
        fclose(f);
        
    

【问题讨论】:

while(path_quantity==0) printf("你会给出多少条路径:\n"); scanf("%d",&path_quantity);为什么这个while循环会导致无限循环 这段代码不会导致无限循环。它只需要给出一个不同于 0 的数字。在该循环的主体中,您为该变量分配一个数字。因此,如果您给出任何不同于 0 的数字,则代码将完成。 如果用户每次输入0就无限 你是对的,但我们不考虑这种情况。问题是你给文件的路径有多少并不重要,当然没有 0。程序最后会给你结果文件搜索乘以您给出的路径数。这可能与为 argv[] 分配更多路径有关。 【参考方案1】:

您不应该更改内容或 argv argv 是一个常量指针数组。

【讨论】:

那么我应该如何将这些路径保存在内存中?在 Js 中,解决方案将是一个包含少量字符串元素的表,但在 C 中对我来说是个问题。【参考方案2】:
for(i;i<=path_quantity;i++) printf("Give path numver %d:\n",i); scanf("%30s",wyraz); fflush(stdin); argv[1+i]=path; printf("%s\n",argv[1+i]); 

您应该通过 malloc 使用指针实现数组,而不是使用 argv。请阅读指针实现的动态数组,这将解决您的问题。

【讨论】:

以上是关于搜索文件时函数 main() 的参数的主要内容,如果未能解决你的问题,请参考以下文章

vs2010使用main函数

C语言中的main函数参数作用

使用“*”作为函数 main() 的参数

C语言 main 函数参数 main(int argc, char *argv[])

C语言 main 函数参数 main(int argc, char *argv[])

如何调用二进制搜索函数运行?