Pointer und Strings verketten

OP #2990454
Lesenswert?

Hallo zusammen,

ich arbeite mich zur Zeit in Zeiger ein. Mir stellt sich folgende Frage, 
worauf ich keine Antwort habe:

Ich habe einen Zeiger auf eine Variable "Testvariable". Diese Variable 
ist ein Array mit 32 Elementen.

Diese Testvariable soll folgender Funktion übergeben werden:
1
void VCP_send_str(char* buf);

Das funktioniert auch wunderbar:
1
VCP_send_str(Testvariable);

Wie ihr sicherlich schon erahnt habt beinhaltet die Testvariable einen 
String. Sagen wir zum Beispiel "Hallo Welt". Jetzt möchte ich der 
Funktion VCP_send_str jedoch den String "Testfunktion(Hallo Welt)" 
übergeben.
Wie baue ich den String nun am Besten zusammen?
Ich könnte natürlich die Stringfunktion strcat() verwenden. Mit der kann 
ich ja aber nur zwei Strings verketten.
Und sowas wie
1
VCP_send_str("Testfunktion(" + Testvariable + ")");
funktioniert nicht.
Könnt ihr mir da einen praktischen Vorschlag machen?
Schönmal Danke im voraus für eure Hilfe!
Grüße Matze
#2990482
Lesenswert?

Du könntest dir dafür auch eine Funktion schreiben, die dir einen String 
in einen anderen einfügt.

z.B.

strinsert(char string_alt[], char string_einfuegen[], int 
pos_an_der_eingefuegt_werden_soll)

Der alte String muss dann natürlich groß genug sein, um den neuen 
aufnehmen zu können.
Oder du machst das ganze mit malloc...
#2990499
Lesenswert?

Der Matze schrieb:

> Ich könnte natürlich die Stringfunktion strcat() verwenden. Mit der kann
> ich ja aber nur zwei Strings verketten.

du brauchst auch noch strcpy und einen weiteren Buffer, in dem du den 
kompletten String zusammenbaust, ehe du ihn an VCP_send_str übergeben 
kannst.

mit dem ersten strcpy stellst du im Zielarray den ersten Teilstring 
rein. Und dann werden mittels strcat alle weiteren Teilstrings da hinten 
drann gehängt.
1
  char Dummy[50];
2

3
  strcpy( Dummy, "Testfunktion" );   // erster Teil. einfach einkopieren
4
  strcat( Dummy, " (" );             // dann: drann hängen
5
  strcat( Dummy, TestVariable );
6
  strcat( Dummy, ")" );
7

8
  VCP_send_str( Dummy );


Oder aber du rufst VCP_send_str einfach 3 mal auf
1
  VCP_send_str( "Testfunktion (" );
2
  VCP_send_str( TestVariable );
3
  VCP_send_str( ")" );

die Variante hat den Vorteil, dass du kein Zwischenarray brauchst, 
welches du dimensionieren musst und das daher auch überlaufen kann.
Sie hat aber den Nachteil, dass je nach dem was sich VCP_send_str 
verbirgt, die zeitliche Abfolge unter Umständen leicht anders sein kann, 
bzw. wenn VCP_send_str von sich auch zb einen \n hinten dran hängt, das 
Ergebnis anders ist.
#2998689
Lesenswert?

Der Matze schrieb:
> Und sowas wieVCP_send_str("Testfunktion(" + Testvariable + ")");
> funktioniert nicht.

dafür wurde die Funktion "sprintf()" erfunden:
1
#define LENGTH 128
2

3
char str[LENGTH];
4

5
sprintf(str, "Testfunktion(%d)", Testvariable);

Die kann man durchaus auch dazu verwenden, mehrere Strings in einem 
Aufwasch aneinanderzuhängen:
1
sprintf(str, "%s%s%s%s", "das ", "sind ", "mehrere", "Strings aneinander.");

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren