JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=27f146fbed4a8ce22caca4ac5af8677fMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Dateiarbeit: markieren? überschreiben?
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 24.03.2003, 16:05    Titel: Antworten mit Zitat

Wenn ich mit sscanf den String in einen Integer umwandle, kommt ein falsches Ergebnis. Crying or Very sad

  1. 20 als Integer in Datei schreiben
  2. Integer auf 30 erhöhen
  3. String aus Datei lesen
  4. String mit sscanf in Integer umwandeln
  5. Integer ausgeben. Ergebnis: 30(der aktuelle Wert des Integers) statt 20(der in die Datei geschriebene Wert

Code:
//...
//Test.bin zum Schreiben und Lesen öffnen
datei=fopen(PFAD,"rb+");

i=20;
//Integer in Datei schreiben
fwrite(&i,sizeof(int),1,datei);

i=30;

//Test.bin schließen
fclose(datei);



//Test.bin erneut zum Schreiben und Lesen öffnen
datei=fopen(PFAD,"rb+");

//aus Datei lesen
fread(buffer,4,1,datei);

//in Integer umwandeln
sscanf(buffer,"%d",&i);

//Integer ausgeben
cout<<i;

//Test.bin schließen
fclose(datei);

_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 24.03.2003, 22:56    Titel: Antworten mit Zitat

Du musst anstatt
Code:
fread(buffer,4,1,datei);

das hier
Code:
fread(&i,sizeof(int),1,datei);

schreiben.

Der sscanf()-Aufruf ist in diesem Falle auch falsch, da du den Integer ja binär und nicht als Zeichenkette gespeichert hast.

Wenn du also
Code:

//Test.bin erneut zum Schreiben und Lesen öffnen
datei=fopen(PFAD,"rb+");

//aus Datei lesen
fread(&i,sizeof(int),1,datei);

//Integer ausgeben
cout<<i;

schreibst, sollte es gehen.
_________________
www.messiahzone.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 25.03.2003, 15:53    Titel: Antworten mit Zitat

Code:
char* answer=" ";

strcpy(answer,"1000*thx");

cout<<answer;


Ausgabe: 1000*thx
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 25.03.2003, 17:13    Titel: Antworten mit Zitat

[quote="The Lord of Programming"]
Code:
char* answer=" ";

strcpy(answer,"1000*thx");

cout<<answer;

[quote]
Achtung! Wenn du char * answer=" "; schreibst, wird ein String erstellt, der maximal 1 Zeichen lang ist. Wenn du jetzt strcpy(answer,"1000*thx"); schreibst, greifst auf ungültigen Speicher zu!

Very Happy Very Happy
_________________
www.messiahzone.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 26.03.2003, 16:20    Titel: Antworten mit Zitat

Ich glaubs zwar nich, aber kann man in VC++ einen String initialisieren, von dem man nich die Länge weiß(ohne dynamische Verwaltung)?
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 26.03.2003, 16:38    Titel: Antworten mit Zitat

Geht ohne Probleme ;)

Code:

#include <iostream.h>
#include <string.h>

void main()
{
   char test[] = "Test";

   cout << test << '\n'
        << "Länge : " << strlen(test) << '\n';
}


Warum bist du nicht auf die Idee gekommen es selber zu probieren?
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 26.03.2003, 19:01    Titel: Antworten mit Zitat

Das weiß ich selber, dass es geht!
Ich meinte eigentlich, dass man am Anfang des Programms einen String initialisiert, ohne zu wissen, wie lang der String sein wird, den man später in den ersten String kopiert und ohne dass man auf ungültigen Speicher zugreift.

Also so z.B.:
Code:
//String1 initialisieren, Länge unbekannt
//Wieauchimmerdasgeht
//String1 initialisieren, Länge 5
char String2[]={"copy"};
//String1 initialisieren, Länge 5000
char String3[5000];

//Irgendeincodekannhierstehen

//Strings von der Länge 1oder10oder200oder5000... können kopiert
strcpy(String1,String2);
strcpy(String1,String3);


Sry, für meine Ausdrucksweise^^ Rolling Eyes
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 26.03.2003, 20:20    Titel: Antworten mit Zitat

Nee das geht nicht... dann müsstest du dir eine maximale Länge für alle Strings festlegen. Meine Empfehlung: STL Strings. Sind viel einfacher in der Handhabung und sind sicher.

Code:

#include <iostream.h>
#include <string>

using namespace std;

void main()
{
   string str1 = "Hallo";
   string str2 = "Welt";
   string str3 = str1 + " " + str2 + '!';

   // ::c_str -- in einen ANSI C String umwandeln
   cout << str3.c_str() << '\n';

   string str4 = "gaaaaaaaaaaaaaaaaaaaaaaaaaaaaanz lang";
   
   str3 = str4;
   cout << str3.c_str() << '\n';

   // ::append -- Einen String anhängen
   str3.append("!!!!!!!!!!!");
   cout << str3.c_str() << '\n';
}


Das sind hier nur 3 Beispiele... Man kann jede Menge damit machen. Ich hab z.B. für meinen Datenbank-Parser eine Funktion geschrieben, die einen String nach bestimmten kriterien ausplittet und die enstandenen "Tokens" in einem STL Vektor speichert.

[/STL Propaganda]
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum