2015-06-04 5 views
2

Мне нужно прочитать некоторые данные из текстового файла и сохранить его в 2D-массиве. Этот код работает хорошо:Переменная «buff» используется без определения

#include <string.h>  
#include <stdio.h> 

int main() { 
    FILE *f = fopen("Read.txt", "r"); 
    char buff[100][100]; 
    char str[100]; 
    int i = 0; 
    while(fgets(str, 100, f)) { 
     strcpy(buff[i], str); 
     i++; 
    } 
    return 0; 
} 

Но почему это не работает, когда я пытаюсь изменить определение бафф в строке 5 до:

char (*buff)[100]; 

Я ожидал, что это определение на работу тоже. Я получаю ошибку:

Run-Time Check Failure #3 - The variable 'buff' is being used without being defined 

ответ

3
char (*buff)[100]; 

Здесь buff является указателем на массив из 100 символов. Поэтому сначала вы должны сделать точку указателя правильной ячейкой памяти перед сохранением в ней некоторого значения.

Предположив вы хотите пойти для динамического выделения памяти, то вы можете иметь

char *buff[100]; 

Теперь в цикле fgets() выделить память для каждого указателя по отдельности, как

buff[i] = malloc(100); 

Примечание здесь бафф массив 100 указателей символов.

+0

Хорошо, не могли бы вы сказать, как заставить этот указатель указывать на действительное местоположение? – k1ber

+0

@KiberPrestupnik Я не вижу необходимости в указателе здесь. Чего вы пытаетесь достичь, используя этот указатель? – Gopi

+0

это просто для практики. Спасибо за объяснение. – k1ber

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