Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

26.07.2008, 10:43

[Erledigt] Text per Zeiger (ofstream) abspeichern

Also.
Bevor ich mir eine Funktion zum abspeichern von Texten schreibe, wollte
ich zuerst mit zeigern versuchen abzuspeichern:

C-/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
#include <iostream>
#include <fstream>


int fWrite ()
{
    int fMenu= 0;
    char cText[1001]= "Hallo";

    char* pText= &cText[1001];
    do
    {
        cout<<endl<<"File-Menu:"<<endl;
        cout<<"1 - in Datei schreiben"<<endl;
        cout<<"3 - Beenden"<<endl;
        cin >> fMenu;
        switch (fMenu)
        {
        case (1):
            {
                ofstream Output_T ("abc.txt", ios::binary);
                Output_T.write ((char*) pText, sizeof (*pText)); // pText speichert ja die Adresse von cText->pText=&cText ; *pText verweißt auf den Wert cText-> *pText=cText; irre ich mich da?

                Output_T.close ();
            }break;
        case (3):
            {
                return 0;
            }break;
        default :
            {
                cout <<"\n\a Falsche Eingabe\a"<<endl;
            }
        }
    }while (fMenu != 3);
    return 0;
}

blöderweise kommt in die Datei nur
ein "Ì" (heißt doch leerer bit oder?).
Warum denn?
MFG Bernhard

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

26.07.2008, 10:50

C-/C++-Quelltext

1
char* pText= &cText[1001];


das ist schonmal falsch. damit setzt du den charzeiger ans ende des strings. du kannst dir den extra zeiger sparen, dazu kannst du direkt cText nutzen. ansonsten auch so kleine weitere fehler.

C-/C++-Quelltext

1
2
ofstream Output_T ("abc.txt", ios::binary | ios::out); 
Output_T.write (cText, 1001 * sizeof(char));

3

26.07.2008, 11:21

ich will es eigentlich mit zeigern machen, da ich später eine funktion einbaue, an die ich den zieger übergeben will.
@TrommlBomml
->char* pText = &cText;
oder wie soll ich das machen ( wenn ich es so schreiben soll: ERROR)

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

4

26.07.2008, 11:40

Zitat von »"Doomish"«

ich will es eigentlich mit zeigern machen, da ich später eine funktion einbaue, an die ich den zieger übergeben will.


gugg dir nochma genau dein c++ buch an^^. char-arrays (auch c-strinsg gennant) sind nix anderes als zeiger wenn du so willst. wenn du ein array erzeugst wie deines hier:

C-/C++-Quelltext

1
char cText[1001];


dann hast du wen du cText ohne indexoperator benutzt einen zeiger. deswegen kannst du z. b. auch arrays auch so übergeben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
char cText[1001] = "Fooooooooooo";

void DoSomething(char *array)
{
    array[50] = ...;
}

//das geht!

DoSomething(cText);


d. h. nochma deutlich: du hast den zeiger schon. das ist der bezeichner von deinem array ohne indexoperator.

und das was du da machst, wäre die adresse vom zeiger übergeben, char** wäre das. wenn dann so:

C-/C++-Quelltext

1
char *ptext = cText;

5

26.07.2008, 11:53

aha
*buchles*
ich will aber nicht den ganzen string übergeben.
oder übergebe ich mit "cText" einen zeiger? :?

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

6

26.07.2008, 11:54

dachte das schreib ich die ganze zeit ;)

7

26.07.2008, 12:01

danke
funktioniert jetzt :)

8

26.07.2008, 12:20

Hm, nja kannst aber z.B. hier folgendes machen:

C-/C++-Quelltext

1
void foo(int* ptr_begin, int* ptr_end)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

9

27.07.2008, 13:10

Nimm die Klasse 'std::string'!

C-/C++-Quelltext

1
2
3
4
5
6
void functionWithPointer(const char*);

// ...


std::string mystring("Hello World");
functionWithPointer(mystring.c_str());


Grüße... Heiko

10

27.07.2008, 13:52

C-/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
#include <iostream>
#include <fstream>

int fWrite ()
{
    int fMenu= 0;
    char cText[1001] = "Hallo";

    do
    {
        cout<<endl<<"File-Menu:"<<endl;
        cout<<"1 - in Datei schreiben"<<endl;
        cout<<"3 - Beenden"<<endl;
        cin >> fMenu;

        switch (fMenu)
        {
        case (1):
            {
                ofstream Output_T ("abc.txt", ios_base::binary);
                Output_T.write (pText, strlen(cText) + 1); 
            }break;
        case (3):
            break;
        default :
            {
                cout <<"\n\a Falsche Eingabe\a"<<endl;
            }
        }
    } while (fMenu != 3);
}
und schon speichert der alles ab ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Werbeanzeige