2013-12-24 7 views
0

Я хочу сохранить содержимое .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; 
} 
+5

'fopen (" location "," r ");' - уверен, что вы хотите '' location '', а не' location'? – Mat

ответ

2

EOF is something different (это макрос, и, таким образом, !EOF всегда является постоянной величиной, и на самом деле не проверить ничего). Возможно, вы хотели использовать feof(). Или, точнее:

int c; 
while ((c = fgetc(ptr)) != EOF) 
{ 
    ... 
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); 
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;
    Check @Fiddling Bits отвечает за выделение буфера для всего файла.
    Предложить size_t fileLength вместо long int fileLength.
    Добавить free(pFileContents);

  6. Нет fclose()

    fclose(ptr); 
    return 0; 
    
  7. Малую: printf("%s",input); не будет распечатать весь файл, если текстовый файл является необычным и имеет встроенный \0.

+1

Спасибо за кредит. +1 –

Смежные вопросы