Hallo zusammen,
ich spiele z.Z. ein bißchen mit C rum (Tiny C Compiler) und wollte mal eine Eingabe von Zeichen in einer verketteten Liste speichern und anschließend aus dieser Liste wieder auf der Konsole zurückgeben. Einlesen funktioniert soweit. Bei der Ausgabe erscheint jedoch der 1. Buchstabe + 3 komische Zeichen, dann der 2. Buchstabe gefolgt von 3 komischen Zeichen ... Kann mir einer erklären was ich bei der Ausgabe denn falsch mache? Der Tiny C Compiler meldet jedenfalls keine Fehler. Das Programm scheint auch so zu laufen. Debuggen kann ich momentan noch nicht, da ich das "Programm" im Notepad geschrieben habe und dann per Kommandozeile mit "tcc hello_world.c -o hello_world.exe" unter Windows 10 kompiliere. Einen ähnlichen - wenn nicht sogar den gleichen - Effekt hatte ich bei der Anzeige der Eingabe als ich getch() statt getchar() zum Einlesen verwendet hatte und den Wert mit printf() wieder ausgab.
Hier der vollständige Code:
Ich habe das Gefühl das ich mich mit den Pointern verhauen habe. Wäre super wenn ein C Guru mal drüber schaut und mir einen Hinweis für die Lösung geben könnte.
Danke das du meine Frage soweit schon gelesen hast...
Was mir noch so auf dem Herzen liegt: Tipps Richtung anderen Compiler oder sogar eine IDE verwenden, sind nicht hilfreich! Ich will mir das Leben absichtlich schwer machen. Und über die Schönheit des Codes kann man auch streiten...
ich spiele z.Z. ein bißchen mit C rum (Tiny C Compiler) und wollte mal eine Eingabe von Zeichen in einer verketteten Liste speichern und anschließend aus dieser Liste wieder auf der Konsole zurückgeben. Einlesen funktioniert soweit. Bei der Ausgabe erscheint jedoch der 1. Buchstabe + 3 komische Zeichen, dann der 2. Buchstabe gefolgt von 3 komischen Zeichen ... Kann mir einer erklären was ich bei der Ausgabe denn falsch mache? Der Tiny C Compiler meldet jedenfalls keine Fehler. Das Programm scheint auch so zu laufen. Debuggen kann ich momentan noch nicht, da ich das "Programm" im Notepad geschrieben habe und dann per Kommandozeile mit "tcc hello_world.c -o hello_world.exe" unter Windows 10 kompiliere. Einen ähnlichen - wenn nicht sogar den gleichen - Effekt hatte ich bei der Anzeige der Eingabe als ich getch() statt getchar() zum Einlesen verwendet hatte und den Wert mit printf() wieder ausgab.
Hier der vollständige Code:
Code:
#include <stdio.h>
typedef struct _node
{
char value;
struct _node *next;
struct _node *previous;
} node;
node *first_node = NULL;
node *last_node = NULL;
node *add_char(char value)
{
node *current = (node *) calloc(1, sizeof(node));
current->value = value;
if(first_node == NULL)
{
first_node = current;
last_node = current;
return current;
}
last_node->next = current;
current->previous = last_node;
last_node = current;
}
char *get_text(void)
{
node *current = first_node;
int size = 50;
char *text = (char *) calloc(size, sizeof(char));
if(current == NULL) return text;
int indx = 0;
while(current != NULL)
{
if(++indx > size);
{
int new_size = size * 2;
char *tmp = (char *) calloc(new_size, sizeof(char));
int i;
while(*text != '\0')
{
*tmp = *text;
tmp++;
text++;
}
char *cleanup = text;
text = tmp;
free(cleanup);
size = new_size;
}
*text = current->value;
current = current->next;
}
size = indx;
char *ret_text = (char *) calloc(size + 1, sizeof(char));
while(*text != '\0')
{
*ret_text = *text;
ret_text++;
text++;
}
free(text);
return ret_text;
}
int main(void)
{
char input;
while((input = getchar()) != '\n')
{
printf(&input);
add_char(input);
}
char *text = get_text();
printf(text);
free(text);
printf("\n\nPress any key to continue... ");
getchar();
return 0;
}
Ich habe das Gefühl das ich mich mit den Pointern verhauen habe. Wäre super wenn ein C Guru mal drüber schaut und mir einen Hinweis für die Lösung geben könnte.
Danke das du meine Frage soweit schon gelesen hast...
Was mir noch so auf dem Herzen liegt: Tipps Richtung anderen Compiler oder sogar eine IDE verwenden, sind nicht hilfreich! Ich will mir das Leben absichtlich schwer machen. Und über die Schönheit des Codes kann man auch streiten...