2011-01-19 6 views
0

я следующий код:FWRITE, Fread - проблемы с FREAD

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; 
} 

Это сбой при чтении и второй вопрос, давайте предположим, что у меня есть структура, в которой я храню как целые числа, поплавки, а также символ * массив и как можно Я просто записываю всю структуру в файл? Normal fwrite with sizeof structure не работает

ответ

0

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

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

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

Даже если он установлен как 20 заранее? Ну, я думаю, malloc hre я прихожу. А как насчет этой структуры? – ThanksInAdvance

+0

нет, вы выделяете массив из 20 указателей в стеке, но вы не выделяете значение одного и того же указателя. – Simone

+0

AAAA Я вижу, черт возьми, это глупо меня. – ThanksInAdvance

1

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

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

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

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

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

0

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

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

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

+0

Хм, я вижу, спасибо. – ThanksInAdvance