2011-12-17 2 views
1

Я пытаюсь прочитать первую строку файла MP3 (я отредактировал этот mp3-файл, чтобы он содержал текст «Я MP3» прямо в начале файла).fstream.read() Не читает ничего вообще

Это то, что я пытаюсь сделать:

#include <iostream> 
#include <string> 
#include <fstream> 
using namespace std; 

int main() 
{ 
    fstream mp3; 
    mp3.open("05 Imagine.mp3", ios::binary | ios::in | ios::out); 
    /*mp3.seekg(0, ios::end); 
    int lof = mp3.tellg(); 
    cout << "Length of file: " << lof << endl; 
    mp3.seekg(0, ios::beg);*/ 

    //char ch; 
    //cout << mp3.get(ch) << endl; 

    char* somebuf; 
    while(mp3.read(somebuf, 10)) //Read the first 10 chars which are "I'm an MP3 file". 
    { 
     //cout << somebuf; 
    } 
    return 0; 
} 

По какой-то причине, что происходит сбой. В какой-то момент это не сработало, но ничего не напечатало, когда я сделал cout < < somebuf. Может кто-то помочь мне с этим?

+0

Первые десять символов будут "Я МР3" – Corbin

ответ

4

Вы никогда не выделено ничего для somebuf:

char* somebuf; 

поэтому он не указывает в любом месте.

char* somebuf = new char[11]; 
somebuf[10] = '\0';   // Not sure if it is necessary to null-terminate... 
while(mp3.read(somebuf, 10)) // Read the first 10 chars which are "I'm an MP3 file". 
{ 
    //cout << somebuf; 
} 


// and free it later 
delete [] somebuf; 

В качестве альтернативы:

char somebuf[11]; 
somebuf[10] = '\0';   // Not sure if it is necessary to null-terminate... 
while(mp3.read(somebuf, 10)) // Read the first 10 chars which are "I'm an MP3 file". 
{ 
    //cout << somebuf; 
} 
+0

зачем вам нужно 11? – Kashyap

+0

И не забывайте «delete []' it after :) :) В качестве альтернативы вы можете использовать cstring: 'char somebuf [10] = {};'. Я добавил '= {}' для инициализации строковых элементов нулевыми символами, что здесь не требуется, но это хорошая практика в целом. –

+0

@thekashyap Он хочет распечатать его. Я не уверен, что он должен быть завершен с нулевой отметкой. – Mysticial

0

Инициализировать буфер:

char somebuf[10]; 
    while(mp3.read(somebuf, 10)) //Read the first 10 chars which are "I'm an MP3 file". 
    { 
     //cout << somebuf; 
    } 
Смежные вопросы