[C] EOF-Zeichen in char-Array

Es ist ein beliebig langer Text in einem txt-File gelesen. Haben ein Testfile bekommen, aber das hat keine 300 Zeichen. Außerdem ist es verlangt, jedes Mal den Speicher neu zu allozieren, damit kein Speicher verschwendet wird.
Dann brauchst du aber keine Abfrage, denn dann ist dein Speicher immer zu klein. Du mußt aber den Speicher summieren. Und warum allozierst du dann gleich am Anfang 10 Zeichen, wenn du doch keinen Speicher verschwenden sollst?
C:
size_t memsize = 0;
char* input = NULL;

while (...) {
  memsize += zusaetzliche_groesse;
  input = realloc(input, memsize * sizeof(*input));
}
free (input);

PS: Und es ist nicht notwendig jedesmal 1 Zeichen mehr zu allozieren als benötigt wird.
 
hab ich wieder rückgängig gemacht mit den 10 Bytes zu beginn.

Aber irgendwie mag er mein realloc nicht, er spuckt immer die Meldung "invalid next size" aus

Code:
if ((b-6) >= s_max)
{
	s_max += 6;
	m_input = realloc(m_input,s_max*sizeof(*m_input));
	if (m_input == NULL)
	{
		printf("Kein Speicher mehr da!");
		return EXIT_FAILURE;
	}
}
 
hab ich wieder rückgängig gemacht mit den 10 Bytes zu beginn.

Aber irgendwie mag er mein realloc nicht, er spuckt immer die Meldung "invalid next size" aus
Und welchen Wert hat s_max in diesem Fall? Verwende den Debugger. Ansonsten ist das zu wenig Kontext um den Fehler eingrenzen zu können.

Code:
if ((b-6) >= s_max)
Du hast die Bedingung falsch umgeformt.
C:
if ((b+6) > s_max)
Aber wie gesagt brauchst du die Bedingung auch nicht, da du ja jedesmal realloc aufrufen willst/mußt.
 
also hab ich das jez richtig verstanden?
es wird ein beliebig langer text eingelesen und du willst dann einen speicher reservieren!?

also wenn ich das richtig verstanden habe, dann kannst du ja im prinzip zuerst schaun wie lang der text ist und dann diesen speicher mit malloc reservieren...

Code:
#include <malloc.h>

struct text {
char c;
}datei;
...
main()
{
...
datei.c[0] = malloc(sizeof (text));
}

Also File einlesen in die Struktur und die größe der Struktur wird dann reserviert...

für den fall dass ich das Problem falsch verstanden habe, schon mal tschuldigung...^^

cheers many
 
Zuletzt bearbeitet:
Außerdem arbeitest du mit char, und sizeof(char) ist immer 1. Du kannst dir also beim realloc das *sizeof(...) sparen, was den Code auch wieder ein bisschen vereinfacht.
 
Code:
#include <malloc.h>

struct text {
char c;
}datei;
...
main()
{
...
datei.c[0] = malloc(sizeof (Text-File));
}


für den fall dass ich das Problem falsch verstanden habe, schon mal tschuldigung...^^

cheers many

Bei mir sind nur 2 Bibliotheken erlaubt: stdio.h und stdlib.h

Und übrigens wird mit mehreren txt-Files gearbeitet, die auf einem Test-Server gespeichert sind und auf die ich nicht zugreifen kann.
 
1.)
wenn du nicht auf diese datein zugreifen kannst, wie soll man dass dann in ein array speichern bzw. speicher reservieren?
irgendwie muss ich mir die datei ja mal anschaun um zu wissen wie lang ist die...

und 2.)
warum sind nur diese 2 bibliotheken erlaubt?

cheers
 
Zurück