fgets in verbindung mit snprintf macht mucken... warum?
-
ich hatte vor eine eingabe (mittels fgets()) in einen neuen string zu schreiben, der indentisch mit dem ersten ist, nur soll bei diesem die stringendkennung wegfallen (snprintf). wenn man eine zahlenfolge (1...7) eingibt klappt alles und der neue string hat ein zeichen weniger als der alte (stringendkennung fällt ja weg), wenn man 8 zeichen eingibt haben beide strings eine identische länge, nämlich 9 wobei dem neuen noch ein smiley angehängt wurde. je mehr zeichen desto schlimmer wirds ;)...
warum wird hier denn überhapt noch was zusätzlich angehängt (zb 9 zeichen: länge ausgangsstring ist 10, länge des "verkürzten" strings ist 17)?
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 80 int main() { char quelle[MAX]; fgets(quelle,MAX,stdin); int len=strlen(quelle)-1; char *str=(char *) malloc(len); if (str==0) return EXIT_FAILURE; snprintf(str,len,"%s",quelle); printf("\nLaenge String/Quelle: %d / %d\n\nStringinhalt: %s\n\n",strlen(str),strlen(quelle),str); free(str); system("pause"); return EXIT_SUCCESS; };
-
Der kopierte String hat schon die richtige Länge (btw ist es vielleicht einfacher, den per memcpy() zu kopieren), ist aber nicht mehr tauglich für die Stringverarbeitungs-Funktionen von C. Z.B. zählt strlen() einfach nur die Zeichen bis zum nächsten '\0'-Zeichen - und da du das freundlicherweise abgeschnitten hast, sucht es weiter in fremden Speicherbereichen, bis es eins findet.