Autor Beitrag
Termi6
Hält's aus hier
Beiträge: 2

Windows Vista 64bit Home Premium
HTML, PHP5, JavaScript, Q-/GWBasic, C++, Assembler (ASM)
BeitragVerfasst: Mi 14.03.07 18:32 
ausblenden volle Höhe C++-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
#include <iostream> 
#include <string>
#include <fstream>
using namespace std;

int _file_grosse;
char _ausgabe[256]; //Festlegeung eines Array für Zeilen eingabe bis X Zeichen

int get_size(char*);
char* read_file(char*);
char* add_fileend(char* _file, char* _file_end, int _file_size);

int main(int argc, char* argv[])  

   //char _eingabe[256]; //Festlegeung eines Array für Zeilen eingabe bis X Zeichen
   //cin.getline(_eingabe, 256); //eingabe ein ganzen Zeile
   //cout << _eingabe; 
   //inout << _eingabe; //Schreiben in eine Datei
   cout << argc << "\n";
   cout << read_file(argv[1]); //Einfache Text-Ausgabe

   return 0


char* read_file(char* _open)
{
   _file_grosse = get_size(_open);
   char* _file_end=".txt"
   char* _file;
   _file=add_fileend(_open, _file_end, _file_grosse);       
   fstream iofile(_file); //öffnen einer Datei für I/O
   iofile.getline(_ausgabe,256); //einlesen ganzer zeilen aus Datei
   return _ausgabe;
}

int get_size(char* _from)
{
    int _a = 0;
    char _test;
    while(_from[_a] != _test)
    {
                    _a++;
    }
    return _a;
}

char* add_fileend(char* _file, char* _file_end, int _file_size)
{
      int _file_new_size=_file_size+3;
      char _test2[_file_new_size];
      for(int _a=0;_a<=3;_a++)
      {
              _file[_file_size+_a]=_file_end[_a];
      }
      for(int _test = _file_new_size;_test>=0;_test--)
      {
           _test2[_test]=_file[_test];  
      }
      //cout << _test2 << endl; (*)
      return _test2;
}


Folgendes:
Das oben aufgeführte Programm soll folgendes tun:
1. Eine als Parameter übergebenden Dateinamen mit der Endung ".txt" versehen.
2. Soll diese Datei geöffnet ausgelesen und anschliessend ausgegeben werden.

Soweit so gut.
Nun tut sich mir Folgendes Problem auf. Sobald ich die mit (*) gekennzeichnete Zeile "cout << _test2 << endl;" reinschreibe, funktioniert das Programm wie zufor beschrieben.

Doch sobald ich diese Zeile Raus nehme oder als Kommentar "//cout << _test2 << endl;" schreibe Funktioniert dies nicht mehr.

Compelieren tu ich das ganze mit DevC++ und Mingw.

Ich hoffe einer von euch erkennt den Fehler...

MfG Termi6

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Topic aus Sonstiges (C# / .NET) verschoben am Mi 14.03.2007 um 19:13
Michael Stenzel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 133


D3 Prof, D7 PE
BeitragVerfasst: Mi 14.03.07 22:44 
Hi Termi6.

Das Array _test2 deklariest Du lokal, soll heißen nach verlassen der Funktion ist der Speicher dafür ungültig und wird von anderen Funktionen überschrieben. Desshalb funktioniert die Ausgabe Local mit cout << _test2, und die rückgabe als char* nicht.

Gruß
Michael.
Termi6 Threadstarter
Hält's aus hier
Beiträge: 2

Windows Vista 64bit Home Premium
HTML, PHP5, JavaScript, Q-/GWBasic, C++, Assembler (ASM)
BeitragVerfasst: Do 15.03.07 15:10 
Ich bekomm das nit in den Griff den Bug. Wenn ich die Variable _test2 am Anfang anlege mit char* _test2; als Global
dann bekomm ich als rückgabe den dateinamen mit endung aber auch mit 4 Hyroglyphen (ñô╝▒) diese sollen ja weg.. deshalb die Funktion die das Filtern sollte..

Hat wer ne andere Idee wie ich 2 char Arrys zusammen fügen kann oder diese erst gar nicht benötige?

_________________
Wer klein Anfängt kann mehr erreichen, als jemand der sich zu viel vornimmt.