strcat concat ein char an einen string?
Verwendung des GDB, finde ich, ich bekomme einen segmentation fault, wenn ich versuche diesen Vorgang:
strcat(string,¤tChar);
Gegeben, dass die Zeichenfolge initialisiert wird, wie
char * string = "";
und currentChar ist
char currentChar = 'B';
Warum führt dies zu einem segmentation fault?
Wenn strcat kann nicht verwendet werden für dieses, wie soll ich sonst concat ein char an einen string?
- strcat erfordert null-terminierte " strings. Ihre einzigen char hat keine null, so strcat halten kopieren, bis er eine null irgendwo hinunter die Linie, die sich in der 2. byte durch einen Unfall, oder ein paar Gigabyte auf der Straße, alle die beim kopieren alle, dass der Müll in Ihrem string, stampfen, auf den stack
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil
¤tChar
ist kein string, nicht fertig mit\0
Charakter. Sollten Sie definierenB
alschar *currentChar = 'B';
. Auch nach http://www.cplusplus.com/reference/clibrary/cstring/strcatstring
sollte genügend Speicherplatz für das Ergebnis string (2 bytes in diesem Fall), aber es ist nur 1 byte.Oder wenn Sie verwenden möchten
char
dann können Sie etwas tun, wie (je nach code):Als reagiert, die von anderen ¤tChar ist ein Zeiger auf char oder char*, aber ein string in C ist char[] oder const char*.
Einer Weise zu verwenden, strcat zum verketten einer char zu string ist die Schaffung einer Mindest-string und verwenden Sie es zur Umwandlung eines char in string.
Beispiel:
Machen eine einfache Zeichenfolge, mit nur 1 Charakter, und das suffix '\0';
Anwendung zu deiner Frage:
cToStr davon aus, dass der string "B":
Und strcat arbeiten!
strcat() nimmt zwei '\0'-terminierte " strings. Wenn Sie an die Adresse eines Zeichens, die routine Blick auf den Speicher, folgt der Charakter, auf der Suche nach terminator.
Da Sie nicht wissen, was, dass der Speicher selbst bezieht, sollten Sie erwarten, dass Probleme, wenn Ihr code zugreift.
Darüber hinaus, Ihre string-argument haben keinen Platz um irgendwelche Zeichen angehängt. Wo ist das Speicher geschrieben? Es wird versuchen, zu schreiben über das Ende der Erinnerung im Zusammenhang mit dieser Zeichenfolge.
Denke ich die einfachste Methode (nicht effizient) wäre
sprintf
sprintf(str, "%s%c", str, chr);
strcatchar()
) die gleiche Arbeit effizienter zu gestalten.Beide Zeichenfolgen müssen null-terminiert sein. Ein einzelner char ist nicht null-terminiert, es ist also undefiniert, wenn strcat wird stop-die Verkettung von Zeichen am Ende. Auch, Zeichenfolge muss mindestens genügend Speicherplatz für die ursprüngliche string-und die daraus resultierenden Zeichenfolge.
Dies funktioniert:
Das erste argument von strcat muss genug Platz haben, um halten Sie den rest der Zeichenfolge. "" ist eine Konstante Zeichenkette und als solche GCC nicht Speicherplatz reservieren.
Machen es ein array mit genug Platz: