从文件中读取内容

时间:2013-12-24 19:32:26

标签: c arrays string file

我想将.txt文件的内容保存到数组中。这里的事情是我首先使用位置到另一个数组,我想使用保存我的位置的数组将文件的内容存储到数组中。 代码似乎不起作用。帮助赞赏。

#include <stdio.h>
#include <string.h>
int main()
{
   char location[50],input[1000]={0};
   int i=0; 
   printf("Enter your file location:\n");
   scanf("%999[^\n]",location);

   FILE *ptr;
   ptr = fopen("location", "r");

   while(!EOF)
   {
     char c;
     c = (char) fgetc(ptr);
     input[i] = c;
     printf("%c", input[i]);
     i++;
   }
   input[i] = NULL;
   printf("%s",input);
   getch();
   return 0;
}

3 个答案:

答案 0 :(得分:2)

EOF is something different(它是一个宏,因此!EOF始终是一个常量值,并且实际上不会检查任何内容)。也许你打算使用feof()。或者,而是:

int c;
while ((c = fgetc(ptr)) != EOF)
{
    ...

答案 1 :(得分:2)

多个问题

  1. 缓冲区scanf()的大小错误,应测试结果。

    char location[50];
    // scanf("%999[^\n]",location);
    if (1 != scanf("%49[^\n]",location)) HandleError();
    
  2. fopen()(@Mat)参数错误。添加测试

    // ptr = fopen("location", "r");
    ptr = fopen(location, "r");
    if (ptr == NULL) HandleOpenError();
    
  3. 错误使用EOF和c类型(@Cornstalks)

    // while(!EOF) {
    //  char c;
    // c = (char) fgetc(ptr);
    int c;
    while ((c = fgetc(ptr)) != EOF) {
    
  4. 错误的终止。

    // input[i] = NULL;
    input[i] = '\0';
    
  5. UB,如果文件长度> = 1000;
    检查@Fiddling Bits为整个文件分配缓冲区的答案 建议size_t fileLength而不是long int fileLength 添加free(pFileContents);

  6. fclose()

     fclose(ptr);
     return 0;
    
  7. 次要:printf("%s",input);如果文本文件不常见且已嵌入\0,则不会打印出整个文件。

答案 2 :(得分:1)

首先,您必须确定文件的长度:

fseek(ptr, 0, SEEK_END);
long int fileLength = ftell(ptr);

然后,创建一个足够大的缓冲区来保存文件的全部内容:

char *pFileContents = malloc(fileLength);
if(!pFileContents)
    return -1; // Error

最后,将文件的内容复制到新创建的缓冲区:

rewind(ptr);
if(fread(pFileContents, 1, fileLength, ptr) != fileLength)
    return -1; // Error
fclose(ptr);