我需要模拟grep-f命令在两个文件之间的效果 编译后的代码没有错误,但当我运行它而不是输出时,它显示了分段错误(核心转储) 我怎么能这么做呢?另外,如果您能找到一种更好的方法来打开f1和f2,而不使用AUX1和AUX2来提供文件名,那就更好了.先谢谢你.

//我知道我必须判断代码是否有足够的参数,如果没有,我应该对stderr做一些事情(这是我在课堂上被告知要做的,但我不知道如何做)

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

int main(int argc, char *argv[])
{
  FILE *file1;
  FILE *file2;
  char aux1[100]="",aux2[100]="";
  strcpy(aux1,argv[1]);
  strcpy(aux2,argv[2]);
  file1 = fopen("aux1","r");
  file2 = fopen("aux2","r");

  char s1[100]="",s2[100]="";
  char aux[100]="";

  while(fscanf(file1,"%s",aux)!=EOF)
  {
    strcat(s1,aux);
    strcat(s1," ");
  }
  s1[strlen(s1)-1]='\0';

  while(fscanf(file2,"%s",aux)!=EOF)
  {
    strcat(s2,aux);
    strcat(s2," ");
  }
  s2[strlen(s2)-1]='\0';

  printf("%s\n",strstr(s2,s1));

  return 0;
}

推荐答案

这里有一个大错误:

strcpy(aux1, argv[1]); 
file1 = fopen("aux1", "r");

你没有打开传递的文件,也没有判断它是否打开,你通过使用NULL文件指针直接进入了一个segfault.

应该是

file1 = fopen(aux1, "r");     // removed " marks
if(file1 == NULL)
    exit(1);

您还问到如何避免使用aux1,这可以用

if(argc < 2)
    exit(1);
fopen(argv[1], "r");

C++相关问答推荐

为什么在C中设置文件的位置并写入文件,填充空字符?

使用单个字节内的位字段

va_copy的使用是未定义的行为吗?

Tiva TM4C123GXL的I2C通信

两个连续的语句是否按顺序排列?

增加getaddrinfo返回的IP地址数量

为什么在4.9.37版的内核中,kfio还需要smp_wmb呢?

为什么双重打印与C中的float具有不同的大小时具有相同的值?

从纯C中访问通用项对话框

C中的指针增量和减量(*--*++p)

如何使用C for Linux和Windows的标准输入与gdb/mi进行通信?

CC2538裸机项目编译但不起作用

C:在编译时构建和使用字符串文字的预处理器宏?

如何在C-函数中混合使用C代码和ASM?

通过描述符查找文件路径时出现问题

如何确保我将使用C标准库函数的函数版本,如&getc";,而不是类似函数的宏版本?

全局变量 y0 与 mathlib 冲突,无法编译最小的 C 代码

将字节/字符序列写入标准输出的最简单形式

Codewars Kata 掷骰子的不稳定行为

c 函数指针,另一种语法