Strings konkatenieren
-
Was in C++ so einfach ist, schein in C so schwer zu sein:
Ich möchte eine Funtion schreiben, die zwei "Strings" zusammenfügt:char* add(char* str1, char* str2);
Ich habe es schon mit strcat versucht, bekomme aber immer Speicherzugriffsfehler!
Kann mir einer von euch helfen?Danke,
Terk
-
char a[10]; char b[10]; char c[20]; c[0]=0; // wichtig strcpy(a, "Hallo"); strcpy(b, " World"); strcar(c,a); strcat(c,b);
Oder du musst den Speicher mit malloc reservieren, wenn du die Größe des Puffers erst zur Laufzeit nicht kennst.
-
char* add(char* str1, char* str2){ while(*str1) str1++; while (*str1++=*str2++) ; return str1; }
wobei beide strings nullterminiert sein müssen und str1 natürlich groß genug um str2 noch aufzunehmen..
-
Ein haeufiger Fehler ist, Puffer zu klein zu dimensionieren.
char buf[8]; sprintf( buf, "%d", val );
das geht nur solange gut, wie "val" klein genug ist.
#include <limits.h> char buf[8]; sprintf( buf, "%d", INT_MAX ); /* peng! */
Wenn man strcat() verwendet, sollte man daher genug Platz im Ergebnispuffer haben:
#include <string.h> char buf[1024]; strcpy( buf, str1 ); // str1 = kurzer string strcat( buf, str2 ); // str2 = kurzer string
Oder man nimmt gleich snprintf(), dann kann nix schiefgehen:
#include <stdio.h> char buf[1024]; snprintf( buf, sizeof(buf), "%s%s", str1, str2 ); // laenge von str1/str2 egal
snprintf() schneidet den Ergebnis-String rechtzeitig ab.
-
Power Off schrieb:
Oder man nimmt gleich snprintf(), dann kann nix schiefgehen:
Oder strncat(). Ist imho am besten geeignet dafür, wenn man wirklich nur zwei Strings zusammenkleben will.