Якщо у вас є досвід роботи на C, ви помітите, що рядки - це лише масиви char, де останній символ є нульовим символом.
Тепер це зовсім незручно, оскільки вам потрібно знайти останнього символу, щоб щось додати. strcat
зробить це за вас.
Тож strcat шукає через перший аргумент нульового символу. Тоді він замінить це змістом другого аргументу (поки це не закінчиться нулем).
Тепер перейдемо до вашого коду:
message = strcat("TEXT " + var);
Тут ви додаєте щось до вказівника до тексту "TEXT" (тип "TEXT" - це const char *. Вказівник.).
Це, як правило, не вийде. Також зміна масиву "TEXT" не буде працювати, оскільки вона зазвичай розміщується в постійному сегменті.
message2 = strcat(strcat("TEXT ", foo), strcat(" TEXT ", bar));
Це може працювати краще, за винятком того, що ви знову намагаєтесь змінювати статичні тексти. strcat не виділяє нову пам’ять на результат.
Я б запропонував зробити щось подібне замість цього:
sprintf(message2, "TEXT %s TEXT %s", foo, bar);
Прочитайте документацію, sprintf
щоб перевірити її параметри.
А тепер важливий момент:
Переконайтесь, що в буфері є достатньо місця для вмісту тексту ТА нульового символу. Є кілька функцій, які можуть вам допомогти, наприклад, strncat та спеціальні версії printf, які виділяють буфер для вас. Якщо не забезпечити розмір буфера, це призведе до пошкодження пам’яті та віддалених можливостей експлуатації помилок.