获取文件并在C中返回一个数组

时间:2015-10-08 15:30:30

标签: c arrays file dynamic

您好我必须创建一个函数,该函数将文件和指向整数的指针作为输入,并返回文件中数字的数组和指针的长度。我创建了这个程序,并在代码部分nuovoarray[i] = s中发现了问题,但我不知道如何解决它。

#include <stdio.h>
#include <stdlib.h>
#include "esercizio.h"

int* leggiArray(char* nomefile, int* n){
  FILE* file = fopen(nomefile,"r");
  char* nuovoarray = (char*) malloc(sizeof(char));
  int i=0;
  char s[256];
  while(fscanf(file,"%s",s)!=EOF){
    nuovoarray[i] = s;
    i++;
    nuovoarray = realloc(nuovoarray,i*sizeof(char));
  }
}

1 个答案:

答案 0 :(得分:0)

解决问题的方法不止一种。这是一个。

  1. 创建一个遍历文件的函数,并返回文件中存在的整数。

  2. 根据该号码分配内存。

  3. 创建第二个函数,在该函数中从文件中读取整数并将其存储在已分配的内存中。

  4. int getNumberOfIntegers(char const* file)
    {
       int n = 0;
       int number;
       FILE* fptr = fopen(file, "r");
       if ( fptr == NULL )
       {
          return n;
       }
    
       while ( fscanf(fptr, "%d", &number) == 1 )
       {
          ++n;
       }
    
       fclose(fptr);
       return n;
    }
    
    int readIntegers(char const* file, int* numbers, int n)
    {
       int i = 0;
       int number;
       FILE* fptr = fopen(file, "r");
       if ( fptr == NULL )
       {
          return i;
       }
    
       for ( i = 0; i < n; ++i )
       {
          if ( fscanf(fptr, "%d", &numbers[i]) != 1 )
          {
             return i;
          }
       }
    
       return i;
    }
    
    int main()
    {
       int n1;
       int n2;
       int* numbers = NULL;
       char const* file = <some file>;
    
       // Get the number of integers in the file.
       n1 = getNumberOfIntegers(file);
    
       // Allocate memory for the integers.
       numbers = malloc(n1*sizeof(int));
       if ( numbers == NULL )
       {
          // Deal with malloc problem.
          exit(1);
       }
    
       // Read the integers.
       n2 = readIntegers(file, numbers, n1);
       if ( n1 != n2 )
       {
          // Deal with the problem.
       }
    
       // Use the numbers
       // ...
       // ...
    
       // Deallocate memory.
       free(numbers);
    
       return 0;
    }