strcat
-
Hallo..
Ich möchte einen Dateinamen in Form eines char Arrays an eine Funktion übergeben und in der Funktion an diesen String noch einen const char anhängen. Ich bin neu in C und habe die Methode strcat() gefunden die aber verlangt dass die source datei schon entsprechend groß ist um das Anhängsel noch mit unter zu bekommen.Muss man wirklich erst ein größeres Char Array erstellen um dieses problem zu lösen?
-
chil14r schrieb:
Muss man wirklich erst ein größeres Char Array erstellen um dieses problem zu lösen?
entweder das, oder der string ist schon lang genug, so dass sich noch was anhängen lässt. wie sollte es sonst gehen? andere programmiersprachen, die z.b. "hello"+"world" können, kopieren auch wild rum. nur ist es für den coder nicht so offensichtlich.
-
Da bastelst du dir einmal eine Funktion:
char * strappend( char *prefix, char *suffix ) { char *str = malloc( strlen( prefix ) + strlen( suffix ) + 1 ); if( !str ) { return NULL; } while( *prefix != 0 ) { *str = *prefix; ++str; ++prefix; } while( *suffix != 0 ) { *str = *suffix; ++str; ++prefix; } *str = 0; return str; }
-
ficky schrieb:
Da bastelst du dir einmal eine Funktion:
das lass besser bleiben. nimm 'strcat' u.ä. die gibts schon fertig.
-
__fricky schrieb:
ficky schrieb:
Da bastelst du dir einmal eine Funktion:
das lass besser bleiben. nimm 'strcat' u.ä. die gibts schon fertig.
Die Funktion war auch nur zur Illustration wie man es händisch machen kann. Aber dann mach ich halt mal die Hausaufgaben:
char * strappend( char *prefix, char *suffix ) { char *str = realloc( prefix, strlen( prefix ) + strlen( suffix ) + 1 ); return strcat( prefix, suffix ); }
-
ficky schrieb:
__fricky schrieb:
ficky schrieb:
Da bastelst du dir einmal eine Funktion:
das lass besser bleiben. nimm 'strcat' u.ä. die gibts schon fertig.
Die Funktion war auch nur zur Illustration wie man es händisch machen kann. Aber dann mach ich halt mal die Hausaufgaben:
char * strappend( char *prefix, char *suffix ) { char *str = realloc( prefix, strlen( prefix ) + strlen( suffix ) + 1 ); return strcat( prefix, suffix ); }
Da hat sich doch glatt der Fehlerteufel eingeschlichen, hier ist die richtige Version:
char * strappend( char *prefix, char *suffix ) { char *str = realloc( prefix, strlen( prefix ) + strlen( suffix ) + 1 ); return strcat( str, suffix ); }
-
^^ das ist doch auch mist. mach mal 'ne funktion ohne malloc/realloc.
-
__fricky schrieb:
^^ das ist doch auch mist. mach mal 'ne funktion ohne malloc/realloc.
Scherzkeks.
-
ficky schrieb:
__fricky schrieb:
^^ das ist doch auch mist. mach mal 'ne funktion ohne malloc/realloc.
Scherzkeks.
#define str_append (erster, zweiter, da_solls_hin) \ sprintf (da_solls_hin, "%s%s", erster, zweiter)
-
__fricky schrieb:
ficky schrieb:
__fricky schrieb:
^^ das ist doch auch mist. mach mal 'ne funktion ohne malloc/realloc.
Scherzkeks.
#define str_append (erster, zweiter, da_solls_hin) \ sprintf (da_solls_hin, "%s%s", erster, zweiter)
Scherzkeks, das bringt einem ja null komma nix, da hat man die nötige Speicherallokation ja weiterhin außerhalb von append. Wenn man genug Speicher hat kann man die Funktionen sowieso direkt aufrufen.
-
ficky schrieb:
...die nötige Speicherallokation...
wieso nötig? meinste nicht, dass es auch ohne geht?
-
__fricky schrieb:
ficky schrieb:
...die nötige Speicherallokation...
wieso nötig? meinste nicht, dass es auch ohne geht?
Im allgemeinen nicht.