luke8800gts
Ensign
- Registriert
- Dez. 2010
- Beiträge
- 191
Grüße,
Kann mir jemand beim Fehlersuchen helfen, die Segmentation fault bringt mich zum verzweifeln...
Es muss an der void inverse liegen, da diese auskommentiert funktioniert
Ich hoff, dass ich nicht blinder total was überseh...
Danke im Voraus
Ps: Überlest die Kommentare, die hab ich nur aus lernzwecken...
Das Progamm soll durch die Console einen Text einlesen und dann invertiert ausgeben...
Kann mir jemand beim Fehlersuchen helfen, die Segmentation fault bringt mich zum verzweifeln...
Es muss an der void inverse liegen, da diese auskommentiert funktioniert
Ich hoff, dass ich nicht blinder total was überseh...
Danke im Voraus
Ps: Überlest die Kommentare, die hab ich nur aus lernzwecken...
Code:
#include <stdio.h>
#include <stdlib.h>
#define BUFFER 80 //constanten buffer def
/*immer nur um ein byte zu reallocieren ist zu ineffizient*/
void mystarcat(char *a, char *b)
{
while(*a) a++;
//solang der pointer auf a zeigt eine Adressstelle weiter
while (*b) *(a++) = *(b++);
//wenn a fertig, wird die Adressstelle danach immer mit b abgeglichen!
//Zum Glück ist google my friend :D
}
void inverse(char *a)
{
char *tmp = *a;
while (*a) a++;
while (*tmp) *(tmp++) = *(a--);
}
int main ()
{
char buffer[BUFFER];
size_t contentSize = 1; //wegen nullbyte...
char *content = malloc(sizeof(char) * BUFFER);
/*von rechts nach links...
malloc reserviert den Speicher und pointer content zeigt auf den Ort */
if(content == NULL) //wenn nicht genug speicher...
{
printf("Failed to allocate content");
return 1;
}
content[0] = '\0'; /*falls im Textdokument nichts steht, mit Nullstelle
abgeschlossen...*/
while(fgets(buffer, BUFFER, stdin))
//fgets nimmt das file von "< filename.txt
//schreibt in buffer, einzulesenden Zeichen, art des inputs
{
char *old = content;
//auch old auf contentOrt, denn wenn Content = Null
contentSize += strlen(buffer);
//größerer buffer
content = realloc(content, contentSize);
if(content == NULL)
{
printf("Realocation faild");
free(old);
return 2;
}
mystarcat(content, buffer);
}
if(ferror(stdin))
//wenn ungültiger Input
{
free(content);
printf("Willst du mich auf den Arm nehmen!?");
return 3;
}
inverse(content);
printf("%s\n", content);
free(content);
return 0;
}
Das Progamm soll durch die Console einen Text einlesen und dann invertiert ausgeben...
Zuletzt bearbeitet: