Problem mit dynamischen char[] und einlesen von Text!
-
Hi!
Ich möchte ein Programm schreiben, welches eine beliebige Anzahl an characters in ein char-Array speichert!
Ich hatte folgende Idee:
#include <stdio.h> #include <stdlib.h> void readWords() { int elements_number = 0; int count; char character; char text[elements_number]; do { scanf("%c",&character); text[elements_number++] = character; } while((character = getchar()) != EOF); for(count = 0; count < elements_number; count++) { printf("%c",text[count]); } } int main() { readWords(); return 0; }
So, wenn ich jetzt:
echo 'abcdefg' | ./test
in der Konsole eingebe, bekomme ich folgenden Output:
aceg
Also speichert er genau jedes zweite char in meinem Array!
Ich hoffe jemand findet den Fehler!
Danke im Voraus für die Antwortenmfg trunksen
-
Das
int elements_number = 0; char text[elements_number];
definiert ein Array der Länge 0.
Da passt nicht ein Zeichen rein.
Das wird später auch nicht mehr vergrößert.Für dynamische Speicheranforderung gibt es
malloc()
undrealloc()
.
-
Achso, jedes zweite Zeichen kommt durch das
getchar()
im while. Das liest auch von stdin.
-
Das war ja mal wirklich schnell!
Danke!definiert ein Array der Länge 0.
Da passt nicht ein Zeichen rein.
Das wird später auch nicht mehr vergrößert.Aber dann verstehe ich nicht, warum aceg schon gespeichert wurden und eben bdf nicht?
Ich dachte mir mittext[elements_number++]
erhöhe ich denn Indizes des Arrays um eins. Also zuerst eben text[0], dann text[1] etc.
Achso, jedes zweite Zeichen kommt durch das getchar() im while. Das liest auch von stdin.
Ok verstehe!
Aber wenn ich nurwhile(getchar() != EOF)
mache, dann gibt er folgendes aus:
bei abcdefg: acegg!
Also immer noch nur jedes zweite Element und g zweimal!mfg trunksen
mfg trunksen
-
Sowohl
scanf()
als auchgetchar()
lesen Zeichen ein. Das Zeichen von getchar speicherst du aber nicht ab.
scanf()
liest das 'a', danngetchar()
das 'b'.
scanf()
liest das 'c', danngetchar()
das 'd'.
....Verzichte auf das
scanf()
. Nimm nur eingetchar()
in der (while-)Schleife.
-
Sowohl scanf() als auch getchar() lesen Zeichen ein. Das Zeichen von getchar speicherst du aber nicht ab.
scanf() liest das 'a', dann getchar() das 'b'.
scanf() liest das 'c', dann getchar() das 'd'.Achso, vielen dank!
Ist ja mal ein dummer Fehler!
Verzichte auf das scanf(). Nimm nur ein getchar() in der (while-)Schleife.
Werde ich machen!
mfg trunksen
-
Und mach erstmal
char text[1000];
zum ausprobieren vom einlesen.
Wenn das klappt, kannst du dich anrealloc()
wagen.