C语言 在 argv 上使用 fopen 时的分段错误



当我尝试执行以下代码时,我仍然遇到分段错误...

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
  if (argc < 4){
     fprintf (stderr,"usage message");
     return (1);
  }
  FILE *src = fopen(argv[1],"r"); //file pointer to inputFile
  FILE *outputFile = fopen(argv[2],"w"); //file pointer to outputFile
  int nth = atoi(argv[3]); //nth term value
  printf("nth term is %d",nth);
  int c;
  int currNum;
  int currCount = 1;
  c = fscanf(src, "%dn",currNum); //read ints line by line
  while( c == 1 ){
    fscanf(src,"%dn",currNum);
    ++currCount;
    if (currCount % nth == 0){
      fprintf (outputFile, "%dn", currNum);
    }
  }
}

不确定我是否必须以某种方式转换 argv[1] 和 argv[2],然后才能将它们用作文件名。

您是否提供了命令行参数? 在打开文件之前,应使用 if 语句进行检查。 例如,您可以添加

if ( argc < 4 )
{
    printf ( stderr, "usage messagen" );
    return ( 1 );
}

此外,将argv[3]stoi更改为 atoi

您无需为 fscanf 添加n。 只是"%d"会做得很好。

"fscanf"输入参数是错误的。 检查下面的一个....

c = fscanf(src, "%dn",currNum);  // wrong
c = fscanf(src, "%dn",&currNum); 
fscanf(src,"%dn",&currNum);

您可以使用 atoi 转换为 int

int nth = atoi( argv[3] );

您还可以NULL检查文件* src 和输出文件。如果您没有提供正确的路径,那么fopen可能会失败。

相关内容

  • 没有找到相关文章

最新更新