函数,该函数将char数组作为参数
Function that takes a char array as a parameter
我想使用一个函数,它将char str[]
作为参数。我想调用提供字符串输入的函数。
void someFunction (char str[]) {
/* ... */
}
// Works.
someFunction("1010101");
// Does not work.
string someString;
someFunction(someString);
我怎样才能接到第二个上班电话?
编辑:我无法更改函数的输入参数。
取决于字符串操作的性质。如果您读取但不写入字符串,请将原型更改为const char str[]
并使用someString.c_str()
,就像其他人建议的那样。
如果更改字符串的字符而不更改字符串的长度,请使用&*someString.begin()
。
如果扩展/截断字符串,则更容易传递string&
并根据字符串对象进行操作。老实说,麻烦少了。
您应该能够做到:
someFunction(const_cast<char*>(someString.c_str()));
虽然我不确定如果str
被修改会发生什么。
最好是修改原始函数,使其采用不同的参数类型。
std::string
需要的是void someFunction(std::string& str);
这个问题是有原因的——std::string
的数据不能保证是连续的内存(至少在C++11之前)。因此,将其缓冲区作为连续分配(char[]
)进行操作是一个非常糟糕的想法。
丢弃CCD_ 12的CCD_ 11也是一个坏主意。您可能面临的一个直接问题是,std::string
实现可能与其他std::string
实例共享后备字符串分配(写时复制),并且您最终会修改其他std::string
的值。当然,在它们自己定义的实现方式中,还有许多其他不好的事情可能会出错——标准为标准库的实现者提供了非常灵活的方式。
编辑:我无法更改函数的输入参数。
请改用std::vector
。
您可以让函数使用std::string
:
void someFunction (std::string &str) {
相关文章:
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 当从函数参数中的临时值调用复制构造函数时
- 如何从"decltype()"获取函数参数的数量<funtion>?
- 如何将lambda作为模板类的成员函数参数
- 模板参数推导失败,函数参数/参数不匹配
- 如何在C++中将迭代器作为函数参数传递
- 将函数参数"const char*"转换为"std::string_view"是
- C++ 如何将数组值解压缩为函数参数
- 主函数参数的属性
- 具有两个间接寻址运算符 (C++) 的函数参数的用途
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 如何定义在用作函数参数时工作的类模板的转换
- 将函数参数完美转发到函数指针:按值传递呢?
- 为什么我不能将引用作为 std::async 的函数参数传递
- 什么..(省略号)作为函数原型中唯一的函数参数,C++?
- 是否可以就地构造一个固定大小的数组作为函数参数?
- 接受模板作为函数参数
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- Arduino 函数参数