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

15.07.2005, 16:26

WriteFile schreibt Quader statt Text

Hallo,
ich habe ein Problem mit WriteFile. Wenn ich einen Char-String mit sprintf bearbeite oder ohne größenangabe initialisiere, dann schreibt WriteFile immer nur Vierecke in meine Textdatei. Ansonsten funktioniert es.

Kann mich jemand aufklären woran das liegt?

Neva

Sicaine

unregistriert

2

15.07.2005, 16:30

Diese "Vierecke" sind zeichen, die dein Notepad nicht darstellen kann. Das kann daran liegen, dass was du da schreibst nich Ascii ist.

3

15.07.2005, 16:49

Ich weiss, aber warum schreibe ich plötzlich kein Ascii mehr?
Der String enthält Ascii-Zeichen.
Wenn ich ihn mit "cout" ausgebe, zeigt sich der gewünschte Text.
Und wenn ich ihn nicht mit sprintf bearbeite oder ohne Größenangabe initialisiere wird auch der korrekte Text in die Textdatei geschrieben.

Bitte helft mir.

Neva

4

15.07.2005, 18:45

etwas code würde helfen 8)

5

15.07.2005, 19:11

Nun gut, hier ist der Code.
Zumindest eine der zig Varianten die ich schon durchprobiert habe.
Durch "sprintf" wird text3 zu einem "dynamically allocated array" glaube ich. Deshalb funktioniert "sizeof" nicht mehr richtig. Das kann man ja einfach ersetzen, aber "WriteFile" funktioniert dummerweise auch nicht mehr.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "iostream"
#include "windows.h"

using namespace std;

int main()
{
    HANDLE file = CreateFile("file1.txt",GENERIC_WRITE,NULL,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
    DWORD numBytesWritten = 0;
    char text1[60] = "Diesen Text sollten sie in der Datei file1.txt lesen.";
    char text2[60] = "Dies ist die 2. Zeile des Textes.";
    char text3[140];
    sprintf(text3,"%s %s\n",text1,text2);
    cout<<text3<<endl;
    WriteFile(file,&text3,sizeof(text3),&numBytesWritten,0);
    CloseHandle(file);
    cin.get();
}

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

15.07.2005, 20:08

Seid wann gibt sizeof die länge eines arrays an? :headscratch:
Text3 dürfte doch ein Zeiger auf ein statisches Array sein und damit hat Text die Größe eines Zeigers.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

7

15.07.2005, 20:41

"sizeof" gibt die Größe des Arrays in Bytes an. Davon abgesehen ist das jetzt nicht wirklich wichtig.

Wieso sind die ausgespuckten Zeichen nicht die, die sich auch im String befinden?
Ich flehe um Hilfe.

Neva

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

8

15.07.2005, 20:58

Nox hat 1111 Beiträge :) Das musste einfach mal gesagt werden!

Seit wann gibt es den sowas hier?

C-/C++-Quelltext

1
char text1[60] = "Diesen Text sollten sie in der Datei file1.txt lesen.";


NOCHMAL: text1 ist ein ZEIGER auf einen Speicherbereich, der kann nicht "Diesen Text..." sein.

probiers mal so:

C-/C++-Quelltext

1
strcpy(text1, "Diesen Text...");


nimm bitte nicht sizeof sondern strlen! Den du willst die Stringlänge ok. :)

Sorry, wenn ich etwas genervt rüberkomme, ist nicht mein Tag :)

9

15.07.2005, 21:15

Danke sehr. Es klappt jetzt.

Neva

10

15.07.2005, 23:08

glückwunsch nox

Werbeanzeige