Verketten Sie zwei char * -Zeichenfolgen in einem C-Programm

8

Ich habe das folgende C-Programm geschrieben:

%Vor%

Ich möchte die beiden Strings verketten, aber es funktioniert nicht.

    
BeCurious 27.08.2013, 14:26
quelle

6 Antworten

15

So funktioniert es:

  1. Malloc-Speicher groß genug, um Kopien von str1 und str2
  2. zu speichern
  3. Dann kopiert es str1 in str3
  4. Dann fügt er str2 an das Ende von str3
  5. an
  6. Wenn du str3 benutzt, würdest du normalerweise free (str3); freigeben

Hier ist ein Beispiel für das Spielen mit. Es ist sehr einfach und hat keine fest codierten Längen. Sie können es hier versuchen: Ссылка

Siehe diesen Beitrag für Informationen zur Größe von char

%Vor%     
dcaswell 27.08.2013, 14:36
quelle
13

Hier ist eine funktionierende Lösung:

%Vor%

Ausgabe:

%Vor%

Sie müssen Speicher für Ihre Strings reservieren. Im obigen Code deklariere ich str1 und str2 als Zeichenarrays mit 16 Zeichen. Ich habe strcpy verwendet, um Zeichen von String-Literalen in sie zu kopieren, und strcat , um die Zeichen von str2 an das Ende von str1 anzuhängen. So sehen diese Zeichen-Arrays während der Ausführung des Programms aus:

%Vor%     
kol 27.08.2013 14:33
quelle
3

strcat concats str2 auf str1

Sie erhalten Laufzeitfehler, weil str1 nicht korrekt für die Verkettung zugeordnet ist

    
Sam I am 27.08.2013 14:29
quelle
2

Wenn Sie Zeichenfolgenliterale wie "this is a string" und in Ihrem Fall "sssss" und "kkkk" verwenden, stellt der Compiler sie in den Nur-Lese-Speicher. % Co_de% versucht jedoch, das zweite Argument nach dem ersten Argument zu schreiben. Sie können dieses Problem lösen, indem Sie einen ausreichend großen Zielpuffer erstellen und darauf schreiben.

%Vor%

Beachten Sie, dass Sie in den letzten Compilern normalerweise eine Warnung erhalten, wenn Sie String-Literale in nicht-konstante Zeichenzeiger umwandeln.

    
rmhartog 27.08.2013 14:32
quelle
1

strcat(str1, str2) hängt str2 nach str1 an. Es benötigt str1, um genug Platz zu haben, um str2 zu halten. In Ihrem Code sind str1 und str2 alle String-Konstanten, also sollte es nicht funktionieren. Sie können diesen Weg versuchen:

%Vor%     
TieDad 27.08.2013 14:30
quelle
1

strcat versucht, den zweiten Parameter an den ersten anzuhängen. Dies wird nicht funktionieren, da Sie implizite konstante Strings zuweisen.

Wenn Sie nur zwei Strings ausgeben möchten,

%Vor%

Würde ich tun.

Sie könnten etwas wie

tun %Vor%

zum Erstellen einer verketteten Zeichenfolge; Bedenken Sie jedoch, stattdessen strncat / strncpy zu verwenden. Und lesen Sie die Manpages sorgfältig für das oben genannte. (oh und vergiss nicht free str1 am Ende).

    
Oliver Matthews 27.08.2013 14:30
quelle

Tags und Links