2016-03-08 53 views
-1

我想使用strstr搜索任何匹配使用子字符串,并将其与一行文本进行比较,但迄今尚未成功获得匹配。我正在使用popen打开并阅读文件,同时尝试使用ipv4地址寻找匹配项来执行搜索。我的代码有什么问题?任何帮助将不胜感激,谢谢。C strstr工作不正常

char *buffe = malloc(sizeof(char)); 

     FILE *rib_file = popen("bgpdump -Mv rib.20160101.0000.bz2", "r"); 
     while(fgets(buffe, sizeof(buffe), rib_file)!=NULL) { 
      if(buffe[strlen(buffe)-1] == '\n') 
       buffe[strlen(buffe)-1] = '\0'; 
      for (int i = 0; i < argc; i++) { 
      if((strstr(buffe, argv[i])) != NULL) { 
       printf("A match found on line: %d\n", line_num); 
       printf("\n%s\n", buffe); 

       find_result++; 
      } 
       line_num++; 
      } 

     } 
      if(find_result == 0) { 
       printf("\nSorry, couldn't find a match.\n"); 
      } 

     if (rib_file) { 
      pclose(rib_file); 
     } 

     free(buffe); 
    } 

什么buffe就像是一个例子:

TABLE_DUMP2|01/01/16 00:00:38|B|202.232.0.3|2497|223.255.254.0/24|2497 7473 3758 55415|IGP 

我要打印的确切行,当我的代码找到一个匹配的上方。

+0

我们需要知道什么'buffe'是什么,你期望这个代码输出什么,代码输出什么,你输入什么输入,等等。 –

+3

你不显示整个代码,但'buffe'似乎是指向分配内存的指针,因为你稍后“释放”它。这意味着'sizeof(buffe)'比您想象的要小:这是指针的大小,而不是分配的字节数。 –

+0

该文件的内容是什么,如果它是二进制数据strstr不是要使用的函数 – Mindaugas

回答

2

sizeof函数告诉你一个类型的大小。由于buffe是一个指针,因此您拨打sizeof(buffe)将使您获得平台上指针的大小,这几乎肯定不是您想要的。你的意思是通过fgets大小的东西buffe分?