我想要使用一个以char str[]
为参数的函数。我想调用函数给出一个字符串输入。
void someFunction (char str[]) {
/* ... */
}
// Works.
someFunction("1010101");
// Does not work.
string someString;
someFunction(someString);
如何才能接到第二个电话?
编辑:我无法更改功能的输入参数。
答案 0 :(得分:3)
取决于字符串操作的性质。如果您阅读但未编写字符串,请将原型更改为const char str[]
并使用someString.c_str()
,就像其他人建议的那样。
如果更改字符串的而不是字符,请使用&*someString.begin()
。
如果扩展/截断字符串,则更容易传递string&
并根据字符串对象工作。老实说,不那么麻烦。
答案 1 :(得分:2)
你应该可以这样做:
someFunction(const_cast<char*>(someString.c_str()));
虽然我不确定如果str
被修改会发生什么。
最好只修改原始函数以采用不同的参数类型。
答案 2 :(得分:1)
std::string
void someFunction(std::string& str);
的所需内容是std::string
这个问题有一个原因 - char[]
的数据不能保证是连续的内存(至少在C ++ 11之前)。因此,将其缓冲区操作为连续分配(const
)是一个非常糟糕的主意。
丢弃std::string::c_str()
的{{1}}也是一个坏主意。您可能面临的一个直接问题是std::string
实现可能与其他std::string
实例共享支持字符串分配(写时复制),您最终将修改其他{{1}的值}秒。当然,还有许多其他不好的东西可能会以他们自己的实现定义的方式出错 - 标准使得标准库的实现者非常灵活。
编辑:我无法更改函数的输入参数。
改为使用std::string
。
答案 3 :(得分:0)
您的功能可以改为std::string
:
void someFunction (std::string &str) {