title image


Smiley Re: Funktion gibt Murks zurück...
Es fehlt die abschließende String-Ende-Null auch für den Hauptfall (dass die Anzahl lenght kleiner als der String source ist). Deshalb ist eine kleine Versetzung notwendig, etwa so:void copystring(char *source, char *target,int start, int length){ int y = start; int x = 0; for(x; x if (*(source + x) != 0) *(target + x) = *(source + y++); else break; } *(target + x) = 0; /* jetzt wird die End-NULL immer angehängt */}Anmerkungen:Etwas eleganter sähe der Code so aus:void copystring(char *source, char *target,int start, int length){ source += start; while (length -- && *source) *target ++ = *source ++; *target = '\0';}Diese Wendung *target ++ = *source ++; kommt in C sehr häufig vor.Aber warum selbst eine eigene Funktion basteln, wenn die C-Standard-Bibliothek eine dafür bereithält. Sie heißt strncpy, und es muß dann nur noch die End-NULL hinzugefügt werden (dass macht strncpy nämlich nicht). Also etwa so:#include /* notwendig! */void copystring(char *source, char *target,int start, int length){ strncpy (target, source + start, length); if (strlen (source) >= length) *(target + length) = '\0'; else *(target + strlen (source)) = '\0';}!!! Alles bitte noch mal nachprüfen, hab's nicht weiter getestet!



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: