#include <string>
#include <stdio.h>
#include <string.h>
#include <cassert>
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( static_cast< size_t >( 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;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGNhc3NlcnQ+CgppbmxpbmUgdm9pZCBDb3B5QW5kTnVsbFRlcm1pbmF0ZSggY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZSwgY2hhciogZGVzdCwgc2l6ZV90IGRlc3Rfc2l6ZSApCnsKICAgIHNvdXJjZS5jb3B5KCBkZXN0LCBkZXN0X3NpemUgKTsKICAgIHVzaW5nIHN0ZDo6bWluOwogICAgY2hhciogZW5kID0gZGVzdCArIG1pbiggc3RhdGljX2Nhc3Q8IHNpemVfdCA+KCBkZXN0X3NpemUgLSAxICksIHNvdXJjZS5zaXplKCkgKTsKICAgICplbmQgPSAnXDAnOwp9CgppbnQgbWFpbigpCnsKICAgIGVudW17IE1BWF9TVFJJTkdfU0laRSA9IDE1IH07CiAgICBjaGFyIGRlc3RbIE1BWF9TVFJJTkdfU0laRSBdOwogICAgc3RkOjpzdHJpbmcgdGVzdCA9ICJUaGlzIGlzIGEgdGVzdCI7CgogICAgQ29weUFuZE51bGxUZXJtaW5hdGUoIHRlc3QsIGRlc3QsIE1BWF9TVFJJTkdfU0laRSApOwoKICAgIGFzc2VydCggc3RyY21wKCB0ZXN0LmNfc3RyKCksIGRlc3QgKSA9PSAwICk7CiAgICByZXR1cm4gMDsKfQ==