Se você possui experiência em C, notará que as strings são apenas matrizes de caracteres onde o último caractere é um caractere nulo.
Agora isso é bastante inconveniente, pois você precisa encontrar o último caractere para acrescentar algo. strcat
fará isso por você.
Portanto, o strcat pesquisa no primeiro argumento um caractere nulo. Em seguida, substituirá isso pelo conteúdo do segundo argumento (até que termine em um nulo).
Agora vamos analisar seu código:
message = strcat("TEXT " + var);
Aqui você está adicionando algo ao ponteiro no texto "TEXT" (o tipo de "TEXT" é const char *. Um ponteiro.).
Isso geralmente não vai funcionar. A modificação da matriz "TEXT" também não funcionará, pois geralmente é colocada em um segmento constante.
message2 = strcat(strcat("TEXT ", foo), strcat(" TEXT ", bar));
Isso pode funcionar melhor, exceto que você está novamente tentando modificar textos estáticos. O strcat não está alocando nova memória para o resultado.
Eu proporia fazer algo assim:
sprintf(message2, "TEXT %s TEXT %s", foo, bar);
Leia a documentação sprintf
para verificar suas opções.
E agora um ponto importante:
Verifique se o buffer possui espaço suficiente para conter o texto E o caractere nulo. Existem algumas funções que podem ajudá-lo, por exemplo, strncat e versões especiais do printf que alocam o buffer para você. Não garantir que o tamanho do buffer leve a corrupção de memória e erros exploráveis remotamente.