使一个适用于旧C字符串(char*,int)的函数可以在std :: string&上运行

kam*_*iro 1 c++ coding-style

假设我有一个非常复杂的缓冲区加扰函数,可以使用以下原型:

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函数).

或者是绕过这个的唯一方法,就是去制作一个新的功能副本,它做同样的事情?(这真的不是很好的风格)

Joe*_*ath 5

只要它没有超过尺寸,你就可以安全地施放它

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*