读取文本文件,在C中复制到数组中

时间:2013-10-14 16:08:23

标签: c arrays

代码应该读取用户输入的文本文件名,将每个字符复制到多维数组中,然后使用标准输出显示它。它编译,但产生难以理解的文本。我错过了什么吗?

    for (i = 0; i < BIGGEST; i++) {
        for (j = 0; j < BIGGESTL; j++) {
            if (fgetc(array, fp) ) != EOF)
                array[i][j] = c;
            else array[i][j] = '\0'


        }

    fclose(fp);    
    return 0;
}

3 个答案:

答案 0 :(得分:2)

当您遇到EOF时,您会停止填充阵列,但无论如何都会打印出完整的阵列。

如果从文件读取的数据小于输入数组,您将读入该数据,然后打印出该数据,以及内存位置中的任何随机字符,您不会使用该文件中的数据覆盖这些字符。

由于要求似乎是打印文本数据,您可以在数组中插入一个特殊标记(例如'\ 0')来指示您遇到EOF的位置,并在到达该标记时停止显示数据。 / p>

答案 1 :(得分:0)

你最好从文件中读取每一行

例如:

int i = 0;
while(fgets(text[i],1000,fp))
{
    i++;
}

答案 2 :(得分:0)

虽然问题已经过编辑,但只有部分代码存在问题。我发布的内容超过了目前问题的要求。 原因是,最初发布的完整代码可以有很多改进。

main()函数中:

为了您的目的,您需要检查argc值是否等于2,然后才能读取argv[1]的值。否则,如果在没有命令行参数的情况下执行程序,在这种情况下是file_name,则会发生无效的内存读取,如果您在argv[1]中读取,则会导致分段错误。

read_file_and_show_the contents()函数中:

如果到达文件末尾或读取最大字符并存储在字符数组中,则停止读取文件。

以下程序将帮助您实现可视化:

#include <stdio.h>

/*Max number of characters to be read/write from file*/
#define MAX_CHAR_FOR_FILE_OPERATION 1000000 

int read_and_show_the_file(char *filename)
{  
   FILE *fp;
   char text[MAX_CHAR_FOR_FILE_OPERATION];
   int i;

   fp = fopen(filename, "r");

   if(fp == NULL)
   {
      printf("File Pointer is invalid\n");
      return -1;
   }
   //Ensure array write starts from beginning
   i = 0;

   //Read over file contents until either EOF is reached or maximum characters is read and store in character array
   while( (fgets(&text[i++],sizeof(char)+1,fp) != NULL) && (i<MAX_CHAR_FOR_FILE_OPERATION) ) ;

   //Ensure array read starts from beginning
   i = 0;

   while((text[i] != '\0') && (i<MAX_CHAR_FOR_FILE_OPERATION) )
   {
      printf("%c",text[i++]);
   }

   fclose(fp);

   return 0;
}

int main(int argc, char *argv[])
{
   if(argc != 2)
   {
      printf("Execute the program along with file name to be read and printed. \n\
              \rFormat : \"%s <file-name>\"\n",argv[0]);
      return -1;
   }

   char *filename = argv[1];

   if( (read_and_show_the_file(filename)) == 0)
   {
      printf("File Read and Print to stdout is successful\n");
   }
   return 0;
}