Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
28.05.2002, 17:36
VerruecktesHuhn



Hi Leute,
kann sein, dass ich einfach nur zu blöd bin, aber Ich habe versucht mit einer win32-konolenanwendung (oder so) einen text in eine bereits existierende .txt
Datei zu schreiben und es klappt einfach nicht.
Damit es keine missverständnisse gib, Den text muss man im programm eingeben. Falls es was nuezt hier mal der Quellcode:

// test001.cpp

#include <stdio.h>
#include <fstream.h>

bool test(char *text,char *ziel)
{
FILE *f;

f=fopen(ziel,"w");

if(f !=NULL)
{
fprintf(f,"%s\n",text);
}

fclose(f);

return true;

}

void main()
{
char *text;
cin>>text;
char *ziel;
cin>>ziel;

test(text,ziel);

puts("ein text wurde geschrieben!");


}

Ich würd mich für eure Hilfe sehr freuen!!!!!

--

zum Seitenanfang zum Seitenende Profil || Suche
001
28.05.2002, 18:04
[RMen]OneStone



Was klappt denn nicht?
BTW: Scheiss Topic!

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
002
28.05.2002, 18:19
apfelkorn



nicht unbedingt scheiss topic, nur das newbiefrage stört, ansonsten entspricht es absolut den regeln fürs board:
"Programmiersprache: Problembeschreibung" :)

Also wir haben absolut keinen Anhaltspunkt, wo das Problem liegen könnte. Sei so nett und schick uns mal die Compiler-Ausgaben und die Beschreibung, was genau nicht funktioniert...

p.s.: Für absolut sauberes kompilieren solltest du noch die datei "iostram.h" includieren, hinter die präprozessoranweisungen ein kleines "using namespace std" und unten statt "puts" ein "cout << "ein text wurde geschrieben" << endl;" schreiben

Gruß, Apfel

--

zum Seitenanfang zum Seitenende Profil || Suche
003
28.05.2002, 19:10
VerruecktesHuhn



Ich hab versucht was apfelkorn vorgeschlagen hat, doch es klappt immer noch nicht!
Ich kann alles ohne Fehlermeldung kompilieren, hier mal was beim kompilieren drann steht:

--------------------Konfiguration: test001 - Win32 Debug--------------------
Kompilierung läuft...
test001.cpp
c:\eigene dateien\c++\test-projekte\test001\test001.cpp(27) : warning C4700: Lokale Variable 'text' wurde ohne Initialisierung verwendet
c:\eigene dateien\c++\test-projekte\test001\test001.cpp(29) : warning C4700: Lokale Variable 'ziel' wurde ohne Initialisierung verwendet
Linker-Vorgang läuft...

test001.exe - 0 Fehler, 2 Warnung(en)

Mein Problem ist, dass das Programm wenn ich (im Programm) den Text eingebe und ihn mit "enter" bestätigt hab sofort abstuerzt.
Dann kommt die Fehlermeldung:

Test001 hat in Testt001.EXE einen Fehler verursacht. Test001 wir geschlossen.

Unter Details wird folgendes angezeigt (vieleicht werdet ihr daraus schlau):

TEST001 verursachte einen Fehler durch eine ungültige Seite
in Modul TEST001.EXE bei 016f:0040dfde.
Register:
EAX=00000000 CS=016f EIP=0040dfde EFLGS=00010286
EBX=00560000 SS=0177 ESP=0066fd88 EBP=0066fd98
ECX=cccccccc DS=0177 ESI=81d9519c FS=5657
EDX=0042c053 ES=0177 EDI=0066fdf8 GS=0000
Bytes bei CS:EIP:
88 11 8b 45 f0 8b 08 8b 51 04 8b 45 f0 8b 4c 10
Stapelwerte:
0042cd68 ffffffff 00000000 00000053 0066fdf8 004010f6 cccccccc 00000000 81d9519c 00560000 cccccccc cccccccc cccccccc cccccccc cccccccc cccccccc

Wenn ich auf "Debug" klicke wird wie gewohnt Visual C++ gestartet, doch die Fehlermeldung:

Ungewohnte Ausnahme in Test001.exe: 0xc0000005: Access violation

wird angezeigt.

Ich hoffe das hat euch geholfen mir zu helfen!

--

zum Seitenanfang zum Seitenende Profil || Suche
004
28.05.2002, 19:11
TheTinySteini



Das Problem wird ganz einfach darin liegen, dass du direkt den Text in nen char* schreiben lässt, ohne aber jemals dafür Speicher deklariert zu haben.
Du solltest also schreiben: Quellcode:char text[256];
cin >> text;
char ziel[256];
cin >> ziel;
[edit]Ja, der Compiler-Hinweis sagt eigentlich schon alles, zusammen mit dem Entergebnis - du schreibst in einen Speicherbereich, in den du eigentlich gar nicht schreiben darfst -> crash.[/edit]

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy


Dieser Beitrag wurde am 28.05.2002 um 19:12 von TheTinySteini bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
005
28.05.2002, 19:45
Leviathan



zur ergänzung: das nennt man wilder zeiger, das ist ein zeiger, der irgentwo hinzeigt, man weiss aber nicht wohin (halt auf den wert, der vorher in seinem speiechrbereich stand).
bei dem was steini geschrieben hat ist text zwar auch ein char *, aber der kompiler reserviert dafür atuomatisch 255*sizeof(char) speiechrplatz, und zwar zusammenhängend.
das kann man auch "von hand" machen, mit
Quellcode:
char * text=NULL;    //Zeiger gehören grundsätzlich mit NULL initialisiert
text=(char *)calloc(256,sizeof(char));

ist identisch mit
Quellcode:
char text[256];

p.s.: wenn du so eine fehlermeldung wie hier zur laufzeit hast liegt es meistens daran, dass du in einen speicehrbereich schreibst wo du nicht hinschreiben darfst.

:edit:
hab was vergessen: wenn du eine datei mit fopen("name.ext","w")
öffnest die schon existiert wird sie damit leer gemacht, das heisst wenn man sie danach wieder schliesst ist sie 0kb groß. nur dass du weisst was du da tust, fopen() ist nicht sehr zimperlich.

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds


Dieser Beitrag wurde am 28.05.2002 um 19:48 von Leviathan bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
28.05.2002, 20:20
VerruecktesHuhn



Vielen Dank Leute, hat sehr geholfen!!!
Alles läuft perfekt!!!
Cu!

--

zum Seitenanfang zum Seitenende Profil || Suche