Если у меня есть std :: vector буфер, в котором есть место для 100 символов, и я вызываю функцию C, которая будет писать строку с нулевым завершением, такую как writestring(&buffer[0], buffer.size())
, из того, что я «Я читал, что все нормально, если в буфере уже есть данные. Но если вектор пуст, поведение не определено. Как мне обойти это, могу ли я написать что-то в буфер, например «qwerty», а затем вызвать функцию writeestring(), чтобы я знал, что поведение всегда определено? Какое хранилище вы используете при вызове функций C? Я просто читал о .data, но я не знаю, насколько это распространено или портативно.Вызов функции C с адресом на пустой std :: vector
Благодаря
Если вы не будете динамически распределять свой буфер до того размера, который заранее неизвестен заранее, то нет большого выигрыша в использовании вектора над простым массивом. –
@CrazyEddie - Я не согласен. С 'std :: vector' (или' std :: array') вы получаете [семантику значений] (http://en.wikipedia.org/wiki/Value_semantics). Я нахожу, что это уменьшает ошибки в клочьях до такой степени, что я * никогда * не использую голые массивы или голые указатели для первых членов. –
Вы можете не согласиться с тем, что хотите, пока осознаете, что ошибаетесь. –