Bexx
Verrückte Erfinderin bei Daniel Düsentrieb
Hallo,
ich leider wieder.... Komme nicht weiter mit einem Programm das ich zu Lernzwecken zum Thema Dateispeicherung entworfen habe.
Hier erst mal der Code
Es will überhaupt nicht kompilieren, wenn ich mit calloc arbeite und wenn ich mit malloc arbeite sieht meine .doc Datei so aus:
und dieser ganze Müll ist über das komplette .doc verteilt.
Hat jemand eine Idee was ich falsch gemacht habe!?
---------------------------------------------------------------------------------------
Nehme alles zurück hab meine Fehler gefunden!
Hab mir alles genau nochmal angesehen und habs dann auch direkt gesehen.
Nur eine Sache noch: Wie kann ich verhindern, dass das \0 in die Datei gespeichert wird?
Zu Nachschlagezwecken hier der fast richtige Code
:
Wäre toll, wenn jemand bezüglich des \0 eine Idee hätte....
ich leider wieder.... Komme nicht weiter mit einem Programm das ich zu Lernzwecken zum Thema Dateispeicherung entworfen habe.
Hier erst mal der Code
Code:
#include "..\..\rebecca.h" // umfasst alle üblichen Bibliotheken
int main()
{
int MAX = 100;
FILE * fp; // Pointer auf Datei deklarieren
char * string;
register short i =0, j = 0;
// Speicher für string reservieren
string = (char*)calloc(MAX, sizeof(char));
printf("Bitte geben Sie einen Text ein, den Sie in eine doc Datei speichern moechten:\n");
while (true)
{
if (j < MAX)
{
scanf("%c", &string[j]); // Text einlesen
if (string[j] == 10)
{
string[j] = '\0'; // string terminieren
break;
}
j++;
}
else
{
char * temp;
temp = string;
string = (char*)calloc((MAX *2),sizeof(char)); //mehr Speicher reservieren, falls nötig
if (string == NULL)
{
puts("Kein Speicher verfügbar!\n"); //Abbruchbedingung falls Zeiger auf NULL
break;
}
for (int x = 0; x < MAX; x++)
{
string[x] = temp[x];
}
MAX= MAX * 2; //Neue Größe von MAX definieren
free(temp); // Speicher wieder freilassen
}
}
fp = fopen("test.doc", "w"); //Pointer auf Datei zuweisen
if (fp == NULL)
{
printf("Operation nicht gelungen!\n");
}
while(!feof(fp))
{
fprintf(fp,"%c", string[i]); //Zeichenweise einlesen
if (string[i] == '!')
{
string[i+1]= '\0'; // nur bis zum ersten Auftreten eines ! beschreiben, danach beenden
free(string); // Speicher von String wieder freilassen
return 0;
}
i++;
}
getch();
exit (1);
}
Es will überhaupt nicht kompilieren, wenn ich mit calloc arbeite und wenn ich mit malloc arbeite sieht meine .doc Datei so aus:
HTML:
Das ist mein Text ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍýýýý«««««««« I Øf; ¸w; X^ [ x ýýýýBitte geben Sie einen Text ein, den Sie in eine txt Datei speichern moechten:
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
Hat jemand eine Idee was ich falsch gemacht habe!?
---------------------------------------------------------------------------------------
Nehme alles zurück hab meine Fehler gefunden!

Nur eine Sache noch: Wie kann ich verhindern, dass das \0 in die Datei gespeichert wird?
Zu Nachschlagezwecken hier der fast richtige Code

Code:
// String in Datei reinschreiben.cpp : main project file.
#include "stdafx.h"
#include "..\..\rebecca.h" // umfasst alle üblichen Bibliotheken
int main()
{
int MAX = 100;
FILE * fp; // Pointer auf Datei deklarieren
char * string;
register short i =0, j = 0;
// Speicher für string reservieren
string = (char*)calloc(MAX, sizeof(char));
printf("Bitte geben Sie einen Text ein, den Sie in eine txt Datei speichern moechten:\n");
while (true)
{
if (j < MAX)
{
scanf("%c", &string[j]); // Text einlesen
if (string[j] == 10)
{
string[j] = '\0'; // string terminieren
break;
}
j++;
}
else
{
char * temp;
temp = string;
string = (char*)calloc((MAX *2), sizeof(char)); //mehr Speicher reservieren, falls nötig
if (string == NULL)
{
puts("Kein Speicher verfügbar!\n"); //Abbruchbedingung falls Zeiger auf NULL
break;
}
for (int x = 0; x < MAX; x++)
{
string[x] = temp[x];
}
MAX= MAX * 2; //Neue Größe von MAX definieren
free(temp); // Speicher wieder freilassen
}
}
fp = fopen("test.doc", "w"); //Pointer auf Datei zuweisen
if (fp == NULL)
{
printf("Operation nicht gelungen!\n");
}
while(!feof(fp))
{
fprintf(fp,"%c", string[i]); //Zeichenweise einlesen
if (string[i] == '\0')
{
free(string); // Speicher von String wieder freilassen
return 0;
}
i++;
}
getch();
exit (1);
}
Wäre toll, wenn jemand bezüglich des \0 eine Idee hätte....
Zuletzt bearbeitet: