Forum: Compiler & IDEs Pointer und Strings verketten


von Der M. (naeschd)


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

von Lukas K. (carrotindustries)


Lesenswert?

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

Na und? Dann verkettest du eben "Testfunktion(" mit "Hallowelt" und das 
Ergebis daraus wiederum mit ")"

von Promeus (Gast)


Lesenswert?

Dann nimm halt mehrere strcat oder verwende sprintf.

von Thorsten H. (lordvader91)


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...

von Karl H. (kbuchegg)


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.

von Bernd (Gast)


Lesenswert?

Der Matze schrieb:
> 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?

warum willst du ihn überhaupt zusammenbauen?

Zum Üben ok, ich sehe da aber keine praktische Anwendung

von Markus F. (mfro)


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.");

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.