Preciso concatenar dois caracteres const como estes:
const char *one = "Hello ";
const char *two = "World";
Como posso fazer isso?
Eu recebi esses char*
s de uma biblioteca de terceiros com uma interface C, então não posso simplesmente usar em seu std::string
lugar.
c++
c
string-concatenation
Anthoni Caldwell
fonte
fonte
strcpy
estrcat
chamadas, pensei que fazia sentido para alterar as tags.Respostas:
No seu exemplo, um e dois são ponteiros char, apontando para constantes char. Você não pode alterar as constantes char apontadas por esses ponteiros. Então, qualquer coisa como:
não funciona. Em vez disso, você deve ter uma variável separada (array char) para armazenar o resultado. Algo assim:
fonte
strcpy(one,two);
deveria serstrcat(one,two);
(não que isso o torne correto, como você corretamente apontou).sprintf(dest,"%s%s",one,two)
e esquecer a cópia?O modo C:
O jeito C ++:
A forma de tempo de compilação:
fonte
Se você estiver usando C ++, por que não usa em
std::string
vez de strings de estilo C?Se você precisar passar esta string para uma função C, simplesmente passe
three.c_str()
fonte
Usando
std::string
:fonte
Atualizado: alterado
string total = string(one) + string(two);
parastring total( string(one) + two );
por motivos de desempenho (evita a construção da coluna dois e total temporário da coluna)fonte
Mais um exemplo:
Mas, a menos que você especificamente não queira ou não possa usar a biblioteca padrão C ++, usar
std::string
é provavelmente mais seguro.fonte
new
. E se ele pode usar, ele deve usarstd::string
, como você diz.Parece que você está usando C ++ com uma biblioteca C e, portanto, precisa trabalhar com
const char *
.Eu sugiro envolvê-los
const char *
emstd::string
:fonte
Em primeiro lugar, você deve criar algum espaço de memória dinâmica. Então, você pode apenas strcat as duas cordas nele. Ou você pode usar a classe c ++ "string". O jeito C da velha escola:
Novo jeito C ++
fonte
Se você não sabe o tamanho das strings, pode fazer algo assim:
fonte
Você pode usar
strstream
. Está formalmente obsoleto, mas ainda é uma ótima ferramenta se você precisa trabalhar com strings C, eu acho.Isso escreverá
one
e,two
em seguida, no fluxo e acrescentará um terminador\0
usandostd::ends
. No caso de ambas as strings acabarem escrevendo exatamente99
caracteres - então nenhum espaço seria deixado para escrever\0
- nós escrevemos um manualmente na última posição.fonte
streambuf
saída direcionando para um buffer de char usado comostream
não é muito difícil também.fonte
Conectar dois ponteiros char constantes sem usar o comando strcpy na alocação dinâmica de memória:
fonte