[英]create array of pointers to files in C programming
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp[argc-1];
int numofProc=argc;
unsigned addr;
char rw;
unsigned int divNum=4096;
int i;
for(i=1;i<=argc;i++){
fp[i-1]=fopen(argv[i],"r");
}
for(i=0;i<argc;i++){
while(fscanf(fp[i],"%x %c", &addr, &rw)==2){
printf("addr : %x \n", addr/divNum);
}
}
for(i=0;i<argc;i++){
fclose(fp[i]);
}
return 0;
}
我想在 C 编程中打开一些文本文件。 我像这样制作了我的代码。 当我在代码中推送 2 个文本文件时,它会打印所有第一个文本文件并打印所有第二个文本文件。 但是,最后它返回分段错误......我不知道哪个部分是错误的。 为什么这段代码最后返回分段错误?
你有一对一的错误。 通常,第一个参数是可执行文件的文件名,第二个和后面的参数是提供的参数。
因此,将是argc - 1
文件名,而不是argc
。 使用NULL
作为fscanf()
文件参数(从失败的fopen()
返回fscanf()
可能会导致分段错误。
修复要处理的文件数量。 您声明了numofProc
,因此您似乎应该使用它。
您还应该检查文件打开是否成功。
尝试这个:
#include <stdio.h>
int main(int argc, char *argv[])
{
int numofProc=argc-1;
FILE *fp[numofProc];
unsigned addr;
char rw;
unsigned int divNum=4096;
int i;
for(i=0;i<numofProc;i++){
fp[i]=fopen(argv[i+1],"r");
if(fp[i]==NULL){
fprintf(stderr,"failed to open %s\n", argv[i+1]);
for(i--;i>=0;i--){
fclose(fp[i]);
}
return 1;
}
}
for(i=0;i<numofProc;i++){
while(fscanf(fp[i],"%x %c", &addr, &rw)==2){
printf("addr : %x \n", addr/divNum);
}
}
for(i=0;i<numofProc;i++){
fclose(fp[i]);
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.