假设我有一个非常复杂的缓冲区加扰函数,可以使用以下原型:
void do_something(char * thebuffer, int thelength);
Run Code Online (Sandbox Code Playgroud)
并且假设我需要让函数在std :: string上运行.但是std :: string.c_str()返回const char*,这是不可变的.
除了创建一个新的char*缓冲区,并将其传递给do_something之外,是否可以将do_something用于std :: string?
我的情况实际上是另一种方式(char*,int到std :: string和taking函数).
或者是绕过这个的唯一方法,就是去制作一个新的功能副本,它做同样的事情?(这真的不是很好的风格)
只要它没有超过尺寸,你就可以安全地施放它
do_something((char *)mystring.c_str(), mystring.size());
要么
do_something(&mystring[0], mystring.size());
以上C++
ISH
do_something(const_cast<char *>(mystring.c_str()), mystring.size());
边注:
std::vector<char>
是一个更好的缓冲区类型而不是string
.比你只是&myvec[0]
用作一个char*
归档时间: |
|
查看次数: |
199 次 |
最近记录: |