簡體   English   中英

在 C 編程中創建指向文件的指針數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM