Jeśli masz doświadczenie w C, zauważysz, że ciągi znaków są tylko tablicami znaków, w których ostatni znak jest znakiem pustym.
Jest to dość niewygodne, ponieważ musisz znaleźć ostatnią postać, aby coś dodać. strcat
zrobi to za ciebie.
Zatem strcat przeszukuje pierwszy argument pod kątem znaku zerowego. Następnie zastąpi to treścią drugiego argumentu (dopóki nie zakończy się na null).
Teraz przejdźmy do twojego kodu:
message = strcat("TEXT " + var);
Tutaj dodajesz coś do wskaźnika do tekstu „TEKST” (typ „TEKST” to const char *. Wskaźnik.).
To zwykle nie zadziała. Również modyfikacja tablicy „TEKST” nie będzie działać, ponieważ zwykle jest umieszczana w stałym segmencie.
message2 = strcat(strcat("TEXT ", foo), strcat(" TEXT ", bar));
To może działać lepiej, z tym wyjątkiem, że ponownie próbujesz zmodyfikować teksty statyczne. strcat nie przydziela nowej pamięci dla wyniku.
Zamiast tego zaproponowałbym coś takiego:
sprintf(message2, "TEXT %s TEXT %s", foo, bar);
Przeczytaj dokumentację, sprintf
aby sprawdzić dostępne opcje.
A teraz ważny punkt:
Upewnij się, że bufor ma wystarczającą ilość miejsca do przechowywania tekstu ORAZ znaku null. Istnieje kilka funkcji, które mogą ci pomóc, np. Strncat i specjalne wersje printf, które przydzielają ci bufor. Brak zapewnienia rozmiaru bufora spowoduje uszkodzenie pamięci i zdalne błędy, które można wykorzystać.