Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit Vergleichsoperator (Anfänger)

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
28.09.2006, 11:43 Uhr
pulse



Hi,

ich bin noch ziemlicher C++ Anfänger und habe eine Frage bezüglich Vergleichsoperatoren.

Folgende Code ist mein erster Versuch, den Header einer AIFF Audiodatei zu parsen.

Dabei möchte ich die ersten 4 Bytes (ID) der Datei in einen Puffer laden, um per if / else zu entscheiden, wo ich die Datei weiter auslesen soll.

Das lesen der 4 Bytes funktioniert soweit, leider stimmt mit dem Vergleich was nicht, denn ich bekomme "False" zurück, obwohl die 4 Bytes zu 100% den Inhalt "FORM" haben (wird per cout zumindest ausgegeben).


C++:
#include <iostream>
#include <fstream>
#include <AudioToolBox/AudioToolBox.h>
using namespace std;

ifstream::pos_type size;
char * ckid;

int main () {

  ifstream file ("test.aif", ios::in|ios::binary|ios::ate);
  int sz_char = sizeof (ID);
    
  if (file.is_open())
  {
    size = sz_char;
    ckid = new char [size];
    file.seekg (0, ios::beg);
    file.read (ckid, size);
        cout << ckid << endl;

    
    if (ckid == "FORM") {
       cout << "Type is FORM\n";
    }
    
    file.close();    
    delete[] ckid;
  }
  else cout << "Unable to open file";
  cout << endl;
  return 0;
}



Wäre sehr dankbar, wenn mir jemand nen Hinweis geben kann wo ich nen Denkfehler drin hab

pulse
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.09.2006, 12:06 Uhr
Blubber2063



Was zum Geier machst du da ? Also ich weiss ja nicht was ID für ein Typ ist, aber merkwürdig ist dein Code schon, der Fehler liegt darin, dass du nur mit der string Klasse den == Operator benutzen kannst. Du vergleichs nur die Startadressen der CStrings. Um die Gleichheit zu prüfen musst du die Funktion strcmp oder strncmp benutzen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.09.2006, 13:29 Uhr
pulse



wie gesagt, bin noch ziemlich am anfang

habs mit nem string gelöst und jetzt funktionierts...

vielen dank!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.09.2006, 16:44 Uhr
Tommix



Hallo,
das Problem war wohl hier:

C++:
ckid = new char [size];
...
if (ckid == "FORM") {


Du vergleichst zwei Zeiger auf Gleichheit, nicht etwa das, worauf sie zeigen. String war genau die richtige Lösung.

Gruß Tommix


Bearbeitung:
Steht ja alles schon da.

Dieser Post wurde am 28.09.2006 um 16:46 Uhr von Tommix editiert.
 
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: