将char数组作为参数的函数

时间:2012-02-17 03:45:51

标签: c++

我想要使用一个以char str[]为参数的函数。我想调用函数给出一个字符串输入。

void someFunction (char str[]) {
    /* ... */
}

// Works.
someFunction("1010101");

// Does not work.
string someString;
someFunction(someString); 

如何才能接到第二个电话?

编辑:我无法更改功能的输入参数。

4 个答案:

答案 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) {