У меня есть приложение Visual Studio 2008 C++ 03, где я хочу скопировать из std :: string в массив символов, но мне нужно массив char должен быть завершен до нуля, даже если он должен обрезать строку для этого.копирование из std :: string в массив символов и завершение нулевого результата
Это, например, работает по желанию:
inline void CopyAndNullTerminate(const std::string& source,
char* dest,
size_t dest_size)
{
source.copy(dest, dest_size);
using std::min;
char* end = dest + min(dest_size - 1, source.size());
*end = '\0';
}
int main()
{
enum{ MAX_STRING_SIZE = 15 };
char dest[ MAX_STRING_SIZE ];
std::string test = "This is a test";
CopyAndNullTerminate(test, dest, MAX_STRING_SIZE);
assert(strcmp(test.c_str(), dest) == 0);
return 0;
}
пример: http://ideone.com/0EBYb
Есть более короткий, более эффективный способ сделать это?
Благодаря
У этого есть неудачный побочный эффект, связанный с необходимостью создания допустимой нулевой строки C для тех реализаций 'std :: string', которые не используют это как внутреннее представление. –
@ K-ballo true, но для большинства реализаций я предполагаю, что это будет используемая реализация ... –
Хотя этот метод короче, он _may_ будет ** менее ** эффективным. Вы должны указать это в своем ответе. –