escrevendo diretamente para buffers internos std :: string

Eu estava procurando uma maneira de encher alguns dados em uma seqüência através de um limite de DLL. Porque usamos diferentes compiladores, todas as nossas interfaces dll são simples char *.

Existe uma maneira correta de passar um ponteiro para a função dll de tal forma que é capaz de preencher o buffer de seqüência de caracteres diretamente?

<code>string stringToFillIn(100, '\0');
FunctionInDLL( stringToFillIn.c_str(), stringToFillIn.size() );   // definitely WRONG!
FunctionInDLL( const_cast<char*>(stringToFillIn.data()), stringToFillIn.size() );    // WRONG?
FunctionInDLL( &stringToFillIn[0], stringToFillIn.size() );       // WRONG?
stringToFillIn.resize( strlen( stringToFillIn.c_str() ) );
</code>

O que parece mais promissor é o & stringToFillIn [0], mas é uma maneira correta de fazer isso, já que você acha que string :: data () == & string [0]? Parece inconsistente.

Ou é melhor engolir uma alocação extra e evitar a pergunta:

<code>vector<char> vectorToFillIn(100);
FunctionInDLL( &vectorToFillIn[0], vectorToFillIn.size() );
string dllGaveUs( &vectorToFillIn[0] );
</code>

questionAnswers(8)

yourAnswerToTheQuestion