【发布时间】:2017-10-11 09:56:55
【问题描述】:
我需要暴力写入一个向量(避免多余的memcpy)。
让我们考虑一下这段非常简化的代码
unsigned read_data ( char * buffer , unsigned maxsize )
{
const char * data = "Hi folks! I'm the data" ;
unsigned size = strlen( data ) ;
if (size > maxsize) return 0 ;
memcpy( buffer,data,size ) ;
return size ;
}
void main ()
{
std::vector<char> v ;
v.reserve( 50 ) ;
unsigned size = read_data( v.data(),v.capacity()) ;
v.force_actual_size( size ) ;
}
这是我想象的方式:数据实际上写入向量中,但向量的大小仍然为0。
所以我需要这个force_actual_size 方法...
有没有办法实现它,或者更好,一种干净的方式来做同样的事情。
当然,read_data 来自我无法修改的老式 API。
【问题讨论】:
-
resize代替reserve(和size()代替capacity())? -
force_actual_size 正在调整大小。
-
@manni66:当 OP 使用它时,你会用
'\0'覆盖数据。 -
这样做的动机是什么?您是否试图避免双重初始化?
-
@Jarod42 read_data 不关心'\0'。