Como é que eu adiciono duas cordas?
Eu tentei name = "derp" + "herp";
, mas eu recebi um erro:
A expressão deve ter tipo integral ou enumeral
C não tem o suporte para cordas que algumas outras línguas têm. Uma string em Dó é apenas um ponteiro para um array de char
que é terminado pelo primeiro caracter nulo. Não há nenhum operador de concatenação de strings em Dó.
Use "strcat" para concatenar duas cordas. Você poderia utilizar a seguinte função para fazê-lo:
#include <stdlib.h>
#include <string.h>
char* concat(const char *s1, const char *s2)
{
char *result = malloc(strlen(s1) + strlen(s2) + 1); // +1 for the null-terminator
// in real code you would check for errors in malloc here
strcpy(result, s1);
strcat(result, s2);
return result;
}
Esta não é a maneira mais rápida de fazer isto, mas você não deve'não se preocupe com isso agora. Note que a função retorna um bloco de memória alocada ao chamador e passa a propriedade dessa memória. É responsabilidade do chamador `livre' a memória quando ela não é mais necessária.
Chame a função desta forma:
char* s = concat("derp", "herp");
// do things with s
free(s); // deallocate the string
Se por acaso você estiver incomodado com o desempenho, então você gostaria de evitar repetidamente escanear os buffers de entrada à procura do terminador nulo.
char* concat(const char *s1, const char *s2)
{
const size_t len1 = strlen(s1);
const size_t len2 = strlen(s2);
char *result = malloc(len1 + len2 + 1); // +1 for the null-terminator
// in real code you would check for errors in malloc here
memcpy(result, s1, len1);
memcpy(result + len1, s2, len2 + 1); // +1 to copy the null-terminator
return result;
}
Se você está planejando fazer muito trabalho com cordas, então você pode estar melhor usando uma linguagem diferente que tenha suporte de primeira classe para cordas.
Você não pode adicionar literais de string como esse em C. Você tem que criar um buffer de tamanho de string literal one + string literal two + a byte para caractere de terminação nulo e copiar os literais correspondentes para esse buffer e também certificar-se de que ele é terminado nulo. Ou você pode utilizar funções de biblioteca como strcat
.