2014-09-13 2 views
-1

Я пытаюсь прочитать файл и получить содержимое файла и сохранить его в массиве из 2 элементов [0]: для содержимого [1]: для значения NULL. Этот код работает правильно, если только я хочу, чтобы напечатать его, но я хочу использовать в качестве массива:Прочитать файл и сохранить его в массиве

char ch; 
FILE *file; 
file = fopen("input.txt","r"); 

    int allocated_size = 10; 
    int used_size = 0; 
    char c, *input, *tmp_input; 

    // allocate our buffer 
    input = (char*)malloc(allocated_size); 
    if (input == NULL) { 
    printf("Memory allocation error"); 
    return 1; 
    } 

    while ((c = fgetc(file)) != EOF){ 

    // make sure there's an empty one at the end to avoid 
    // having to do this check after the loop 
    if (used_size == allocated_size-1) { 

     allocated_size *= 2; 
     tmp_input = (char*)realloc(input, allocated_size); 
     if (tmp_input == NULL) { 
     free (input); 
     printf("Memory allocation error"); 
     return 1; 
     } 
     input = tmp_input; 
    } 

    input[used_size++] = c; 
    } 

    // we are sure that there's a spot for last one 
    // because of if (used_size == allocated_size-1) 
    input[used_size] = '\0'; 

    printf("\nEntered string in the file: %s\n", input); 

Но как я могу использовать «вход», как массив:

char *input[] = {"This is string value from file!", NULL}; 

Для этого случая Я могу получить доступ к тексту таким образом: input[0]

+0

'из-за if (used_size == alloc_size-1)' wrong. Измененная used_size уже была увеличена, когда вы выходите из цикла. (добавьте assert(), и вы увидите его один раз) – wildplasser

ответ

1

Так что для того, чтобы достичь этого

char *input[] = {"This is string value from file!", NULL}; 

Если я правильно понять с вашей рецензией затем объявить ввод как это

char *input[2]; 

И каждый раз, когда вы выполняете какие-либо операции на указателе строки, например malloc и перераспределить и т.д. использовать ввод [0]. Эта первая запись будет содержать ваш текст.

Причина, по которой эта строка в первой записи означает, что вам нужен массив указателей на символы.

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