Ho fatto un po 'di lettura di base e da quello che ho raccolto .c_str() ha sempre un terminatore nullo.C++ memcpy to char * da c_str
Ho un abbastanza semplice programma in C++:
int main(int argc, char** argv)
{
std::string from = "hello";
char to[20];
memcpy(to, from.c_str(), strlen(from.c_str())+1);
std::cout<< to << std::endl;
return 0;
}
Sarà che memcpy garantire che copio su una stringa con terminazione null alla mia variabile (a condizione che la mia stringa da è più corta di lunghezza)?
Sì, dal momento che 'c_str()' è sempre nullo-terminata, ma non v'è alcun motivo particolare per fare questo? – chris
Perché stai facendo questo? Uno dei principali punti di forza di std :: string è * non * che utilizza matrici raw di char come questa. –
A proposito, 'size()' o 'length()' otterrà una dimensione temporale costante, mentre 'strlen()' è lineare. – chris