Przede wszystkim nie używaj char*
lub char[N]
. Użyj std::string
, a wszystko inne stanie się takie proste!
Przykłady,
std::string s = "Hello";
std::string greet = s + " World"; //concatenation easy!
Łatwe, prawda?
Teraz, jeśli potrzebujesz char const *
z jakiegoś powodu, na przykład gdy chcesz przejść do jakiejś funkcji, możesz to zrobić:
some_c_api(s.c_str(), s.size());
zakładając, że ta funkcja jest zadeklarowana jako:
some_c_api(char const *input, size_t length);
Odkryj std::string
siebie, zaczynając od tego miejsca:
Mam nadzieję, że to pomoże.
Skoro jest to C ++, to dlaczego nie użyć
std::string
zamiastchar*
? Konkatenacja będzie trywialna:źródło
operator+=
zarówno zwolnienie, jak i alokacja. Alokacje stert należą do najdroższych operacji, które często wykonujemy.Jeśli programowałeś w C, zakładając, że
name
naprawdę jest to tablica o stałej długości, jak mówisz, musisz zrobić coś takiego:Widzisz teraz, dlaczego wszyscy polecają
std::string
?źródło
Istnieje funkcja strcat () z przeportowanej biblioteki C, która wykona za Ciebie konkatenację typu „łańcuch w stylu C”.
BTW, mimo że C ++ ma wiele funkcji do obsługi ciągów w stylu C, może być korzystne, jeśli spróbujesz wymyślić własną funkcję, która to robi, na przykład:
...i wtedy...
... czego wynikiem jest
file_name.txt
.Możesz również ulec pokusie, aby napisać własny,
operator +
jednak operator IIRC przeciąża tylko wskaźniki jako argumenty.Nie zapominaj również, że wynik w tym przypadku jest przydzielany dynamicznie, więc możesz chcieć wywołać na nim funkcję delete, aby uniknąć wycieków pamięci, lub możesz zmodyfikować funkcję, aby używała tablicy znaków przydzielonej stosowi, pod warunkiem, że ma ona wystarczającą długość.
źródło
strncat()
funkcja, która zwykle jest lepszą alternatywąstrncat
nie ma tu znaczenia, ponieważ znamy już długość drugiego parametru".txt"
. Tak by byłostrncat(name, ".txt", 4)
, co nam nic nie daje.strcat (miejsce docelowe, źródło) może służyć do łączenia dwóch ciągów w języku c ++.
Aby mieć głębokie zrozumienie, możesz wyszukać w poniższym linku-
http://www.cplusplus.com/reference/cstring/strcat/
źródło
Lepiej jest używać klas ciągów C ++ zamiast ciągów w starym stylu, życie byłoby znacznie łatwiejsze.
jeśli masz istniejący łańcuch w starym stylu, możesz zamienić go na klasę string
źródło
C ++ 14
Odpowiedź na pytanie:
źródło
źródło