fwrite, fread - проблемы с fread - PullRequest
0 голосов
/ 19 января 2011

У меня следующий код:

int main()
{
    char* pedal[20];
    char* pedal2[20];
    for (int i = 0; i < 20; i++)
    {
        pedal[i] = "Pedal";
    }
    FILE* plik;
    plik = fopen("teraz.txt","wb");
    for (int i = 0; i < 20; i++)
    {
       fwrite(pedal[i],strlen(pedal[i]),1,plik);
    }
    system("pause");
    fclose(plik);
    plik = fopen("teraz.txt","rb");
    for (int i = 0; i < 20; i++)
    {
        fread(pedal2[i],5,1,plik); //I know for now that every element has 5 bytes
    }
    for (int i = 0; i < 20; i++)
    {
        std::cout << pedal2[i] << std::endl;
    }
    fclose(plik);
    system("pause");
    return 0;
}

Это сбой при чтении и второй вопрос. Давайте предположим, что у меня есть структура, в которой я храню как целые числа, числа с плавающей запятой, а также массив char * и как я могу легко написать всю структурув файл?Обычный fwrite с sizeof структурой не работает

Ответы [ 3 ]

1 голос
/ 19 января 2011

Ваша проблема в том, что вы не выделили буфер для чтения.На самом деле строка

fread(pedal2[i],5,1,plik)

читает в неизвестном месте.Вам нужно выделить память (в вашем случае это 5 + 1 байт для строки с нулем в конце).

pedal2[i] = malloc(5+1);
fread(pedal2[i],5,1,plik)

Не забудьте освободить ее после использования.

0 голосов
/ 19 января 2011

Кажется, на ваш первый вопрос уже ответили Simone & Dewfy.

Для вашего второго вопроса о том, как записать структурные значения в файл, вам нужно будет записать элемент по элементу.

Пожалуйста, отметьте fprintf .Вы, вероятно, можете использовать его для записи разных типов данных.

0 голосов
/ 19 января 2011

Вы не можете читать в pedal2 без предварительного выделения места для него.

Вам нужно что-то вроде этого:

for (int i = 0; i < 20; ++i) {
    pedal[i] = malloc(100); //allocate some space
}
...