 |
JLI Spieleprogrammierung
|
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
|
Verfasst am: 24.03.2003, 16:05 Titel: |
|
|
Wenn ich mit sscanf den String in einen Integer umwandle, kommt ein falsches Ergebnis.
- 20 als Integer in Datei schreiben
- Integer auf 30 erhöhen
- String aus Datei lesen
- String mit sscanf in Integer umwandeln
- 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 |
|
 |
Jörg JLI MVP


Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 24.03.2003, 22:56 Titel: |
|
|
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 |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 25.03.2003, 15:53 Titel: |
|
|
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 |
|
 |
Jörg JLI MVP


Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 25.03.2003, 17:13 Titel: |
|
|
[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!
 _________________ www.messiahzone.de.vu |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 26.03.2003, 16:20 Titel: |
|
|
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 |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 26.03.2003, 16:38 Titel: |
|
|
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 |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 26.03.2003, 19:01 Titel: |
|
|
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^^  _________________ 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 |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 26.03.2003, 20:20 Titel: |
|
|
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 |
|
 |
|
|
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
|