if (cstring != "48..57") immer true?!

Megamorph

Mitglied
Mit dem folgenden Code lese ich die erste Zeile einer Datei aus:

Code:
	char cstring[16];
	fstream f;
	f.open("C:\\settingsfx.ini", ios::in);
	f.getline(cstring, sizeof(cstring));
	f.close();
	if (cstring != "489314831648357")
	{
		ExitProcess(0);
	}

- in der Datei steht 489314831648357
- wenn man sich cstring (zb. per messagebox) ausgeben lässt, erscheint 489314831648357
- trotzdem springt er immer zu ExitProcess

Mache ich irgend etwas falsch?
Big Thx
mfg
 
Hi,

Die Funktion sizeof ermittelt die Anzahl an Byte die eine Variable im Arbeitsspeicher belegt.
Daher ist sie ungleich der Zahl die du aus der Datei ausliest und folglich wird zu exit process gesprungen.
 
Die Funktion sizeof ermittelt die Anzahl an Byte die eine Variable im Arbeitsspeicher belegt.
Das verstehe ich.

edit: zu früh auf "Antworten" gedrückt:

Code:
	char cstring[16];
	fstream f;
	f.open("C:\\settingsfx.ini", ios::in);
	f.getline(cstring, 15);
	f.close();
	if (cstring != "489314831648357")
	{
		ExitProcess(0);
	}

Da sizeof anscheinend nicht das gewünschte Ergebnis liefert, habe ich die Zahl erst einmal manuell eingetragen, allerdings springt er mir immer noch in die ExitProcess...

Wenn jemand noch eine Idee bzw. eine Anleitung für nicht ganz so C++ Erfahrene hätte, wäre ich euch sehr verbunden. (-;
 
Zuletzt bearbeitet:
Mit dieser Zeile:
C++:
if (cstring != "489314831648357")
führst du keinen Stringvergleich durch, sondern vergleichst nur die Speicheradressen der beiden Zeichenketten und die sind natürlich nie gleich. Du müsstest eine Funktion für den Stringvergleich nehmen:
C++:
if( strcmp(cstring, "489314831648357") != 0 )
Ansonsten, warum machst du dir das Leben nicht leichter, indem du durchgängig mit C++ arbeitest;
C++:
ifstream f("C:\\settingsfx.ini")

if( f.is_open() )
{
    string str;
    
    if( getline(f, str) )
    {
        if( str == "489314831648357" )
        {
            ExitProcess(0);
        }
    }
    
    f.close();
}
Gruß
MCoder
 
führst du keinen Stringvergleich durch, sondern vergleichst nur die Speicheradressen der beiden Zeichenketten und die sind natürlich nie gleich. Du müsstest eine Funktion für den Stringvergleich nehmen:

Code:
if( strcmp(cstring, "489314831648357") != 0 )

Achso das wusste ich nicht, aber auf deine Weise geht es nun, also nochmal vielen Dank!

Bei "string str;" kommt immer ein Fehler "undeclared identifier string", obwohl ich <studio>, <iostream> und <string> geinlcudet habe...
 
Zurück