[VC++6] Een char array van 3 elementen met 7 chars?

Pagina: 1
Acties:
  • 36 views sinds 30-01-2008

  • Rockster
  • Registratie: Juni 2002
  • Laatst online: 27-08 13:30
Ik ben bezig met een simpel ( :P ) id3v2 uitleesprog voor mijn mp3 bestanden, maar na een aantal regels code stuit ik al op dit vreemde fenomeen, waarbij er in een array van chars van 3 elementen, 7 characters passen :?

Ik heb de volgende code:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <fstream>

using namespace std;

struct mp3tag{
    char header[3];
};

int main() {

    ifstream mp3;
    mp3tag tag;

    mp3.open("test2.mp3", ios::binary);

    if( mp3.fail() ) {
        cout << "Mp3 bestand niet geopend!\n";
        exit(1);
    }

    mp3.read( (char *) &tag, sizeof(mp3tag));
    cout << tag.header << endl;

    return 0;
}


Volgens mij niks raars aan, hij compileerd zonder warnings/errors, maar als ik hem run, dan krijg ik de volgende output:

Afbeeldingslocatie: http://members.evolt.org/robster/wazig.GIF

Ik heb gecontroleerd met ultraedit, en de eerste 3 bytes van het bestand zijn inderdaad "ID3".

Ik heb verschillende keren mijn code gecompileerd (met verschillende workspaces), verschillende mp3's geprobeerd, en toch houd ik deze error.

Als ik het aantal in elementen wijzig in 2 (char header[2] ) dan geeft ie ook 7 char's als output. Zet ik in plaats van een array van chars in de structure, 3 keer een "losse" variabele van een char (dus: char header1, char header2, char header3) dan staat er wel "ID3", maar dan verdeeld over 3 variabelen, en zo wil ik het niet doen! :P

Het is ook geen fout van 'cout', want als ik bij bovenstaande code
C++:
1
strcmp(tag.header, "ID3")

toevoeg, dan geeft hij aan dat de twee strings niet gelijk zijn...

Iemand een idee hoe dit komt :?

[ Voor 5% gewijzigd door Rockster op 25-11-2002 21:36 . Reden: typo ]

Mitsu PUHZ-SHW112YAA + ERSC-VM2C


  • Lone Gunman
  • Registratie: Juni 1999
  • Niet online
je char header[3] is niet echt zero-terminated...

Experience has taught me that interest begets expectation, and expectation begets disappointment, so the key to avoiding disappointment is to avoid interest.


  • whoami
  • Registratie: December 2000
  • Laatst online: 20:46
Je zult dus een array nodig hebben van 4 elementen, waar je dus op de 4de plaats een '\0' karakter zet.
code:
1
2
I D 3  \0
1 2 3 4

https://fgheysels.github.io/


  • Rockster
  • Registratie: Juni 2002
  • Laatst online: 27-08 13:30
/edit laat maar, ik heb het opgelost, bovenstaande was inderdaad de oplossing!

Bedankt! _/-\o_

[ Voor 90% gewijzigd door Rockster op 25-11-2002 22:03 ]

Mitsu PUHZ-SHW112YAA + ERSC-VM2C


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 20:49

.oisyn

Moderator Devschuur®

Demotivational Speaker

mja, niet echt een topic waard dit...

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Dit topic is gesloten.