当我尝试执行以下代码时,我仍然遇到分段错误...
#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
可能会失败。