Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Bestimmte Anzahl an byte auslesen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
06.03.2005, 21:42 Uhr
~speedy1982
Gast


Hallo zusammen,

ich habe da ein Problem an dem ich jetzt langsam wirklich verzweifele.

ich lese mit folgenden Code 3 BYTE aus einer File:

C++:
char *buffer = new char[3];
....
fread(buffer, sizeof(char[3]), 1, datei);



Nun wenn ich es jetzt ausgeben will kommt da nicht TAG sondern TAGyyyyh, warum?

Gruß
speedy
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.03.2005, 21:59 Uhr
Pablo
Supertux
(Operator)


was soll sizeof(char[3]) denn sein? es wäre sizeof(char)*3 aber sizeof(char)==1, also reicht da eine 3 vollkommen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.03.2005, 22:12 Uhr
~speedy1982
Gast


Hallo Pablo,

danke für deine Antwort, du hast recht das ist ein schwachsinn, bin noch ziemlich neu in c++ und winapi

Das Problem bestimmt aber weiterhin, TAG ist doch drei byte lange oder? Als Ausgabe bekomme ich aber immer noch TAG²²²² in der Console. Bin echt am verzweifeln.

Gruß
speedy


C++:
#include <iostream>
#include <fstream>  
#include <string>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;


int main()
{
    FILE* datei;
    char* buffer = new char[3];    
    char* buffer2 = new char[30];
    char* buffer3 = new char[30];
    char* buffer4 = new char[30];
    char* buffer5 = new char[4];
    char* buffer6 = new char[30];
    char* buffer7= new char[1];
    unsigned long FileSize = 0;    
    
    datei = fopen("e:\\mp3\\Gotihc\\Cult - American gothic.mp3", "r+");
    
    fseek(datei, 0L, SEEK_END);
    FileSize = ftell(datei);

    fseek(datei,0,SEEK_SET);
    fseek(datei,FileSize-128,SEEK_CUR);
    fread(buffer,  sizeof(char)*3, 1, datei);  
    fread(buffer2,  sizeof(char)*30, 1, datei);  
    fread(buffer3,  sizeof(char)*30, 1, datei);  
    fread(buffer4,  sizeof(char)*30, 1, datei);      
    fread(buffer5,  sizeof(char)*4, 1, datei);
    fread(buffer6,  sizeof(char)*30, 1, datei);
    fread(buffer7,  sizeof(char)*1, 1, datei);            

    fclose(datei);    

             delete [] buffer;
    delete [] buffer2;
    delete [] buffer3;
    delete [] buffer4;
    delete [] buffer5;
    delete [] buffer6;
    delete [] buffer7;                  
    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.03.2005, 22:27 Uhr
Pablo
Supertux
(Operator)


Ich sehe, dass du fread auch falsch benutzt. Siehe fread(3)

dabei sollte sein fread(buffer, 1, sizeof(char)*3, datei); also "lese ein Byte vom einem Block aus 3 Bytes"
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 06.03.2005 um 22:27 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.03.2005, 22:37 Uhr
~gast
Gast


also bei diesem quelltext sehe ich jetzt gar keine ausgabe, aber wenn man das jetzt so übernehmen würde + ausgabe von buffer und so weiter, mit irgendeiner datei, fällt mir jetzt gerade kein fehler auf, außer das ich in C++ nicht unbedingt alles mit fopen fread etc machen würde sondern mit istream. Achja ich glaub du hast da ein paar header zu viele die du nicht benötigst
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.03.2005, 23:59 Uhr
0xdeadbeef
Gott
(Operator)


In C:

C++:
#include <stdio.h>

/* ... */

FILE *fd = fopen("datei.txt", "r");
char buf[4]; /* 3 Zeichen plus sentinel */

fread(buf, sizeof(char), 3, fd);
buf[3] = '\0';


In C++:

C++:
#include <fstream>
// und sinnigerweise:
#include <string>

// ...

ifstream in("datei.txt");
char buf[4];

in.read(buf, 3);
buf[4] = '\0';

// und sinnigerweise noch:
string s(buf);


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.03.2005, 00:24 Uhr
~speedy1982
Gast


Vielen vielen Dank, nun geht es,

das '\0' gibt das ende des strings an, genau das hat gefällt drum auch das komische Zeichen am Schluss.

ich glaube ich werde in Zukunft nur noch mit den stream arbeiten.

Noch eine schöne Nacht
speedy
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: