当我尝试执行以下代码时,我仍然遇到分段错误...
#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, "%d\n",currNum); //read ints line by line
while( c == 1 ){
fscanf(src,"%d\n",currNum);
++currCount;
if (currCount % nth == 0){
fprintf (outputFile, "%d\n", currNum);
}
}
}
在我将它们用作文件名之前,我不确定是否必须以某种方式转换argv [1]和argv [2]。
答案 0 :(得分:1)
您是否提供了命令行参数?您应该在打开文件之前使用if
语句进行检查。例如,您可以添加
if ( argc < 4 )
{
printf ( stderr, "usage message\n" );
return ( 1 );
}
另外,将stoi
的{{1}}更改为argv[3]
。
您无需为atoi
添加\n
。只需fscanf
即可。
答案 1 :(得分:1)
向"fscanf"
提供输入参数是错误的。检查下面一个.......
c = fscanf(src, "%d\n",currNum); // wrong
c = fscanf(src, "%d\n",&currNum);
fscanf(src,"%d\n",&currNum);
答案 2 :(得分:0)
您可以使用atoi转换为int
int nth = atoi( argv[3] );
你也可以NULL
检查文件* src和outfile。如果您没有提供正确的路径,那么fopen
可能会失败。