我有以下代码
void func(char c[]) {
c[1]= '@';
std::cout<<c<<"\n"
<<sizeof(c)<<"\n";
}
// Main 1
int main() {
char temp[6] = "pinta";
func(temp);
}
这里如果我把main函数改成下面这样
//Main 2
int main()
{
func("pinta");
}
meow@vikkyhacks ~/Arena/c/LinkedList $ g++-4.8 scrap/test.cpp
scrap/test.cpp: In function ‘int main()’:
scrap/test.cpp:12:14: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
func("pinta");
^
经过一些谷歌搜索,我了解到第二个 main
没有传递任何字符数组,而是传递一个 read only string literal
,当点击 c[ 1] = '@'
抛出段错误。
我的问题是
"如何避免使用
temp
变量,该变量在Main 1
并直接将字符数组传递给func
作为 它的参数 ?"重要的条件是允许编辑角色 传入
func
的数组。
编辑
我看到有很多答案阻止我执行 c[1]= '@';
,我不能这样做,因为那一行对我来说非常重要。
最佳答案
您无法避免创建临时对象,因为写入字符串文字的内存是非法的,但您可以让编译器为您创建它。取而代之的是 std::string
参数 - 这比 char
数组更安全,并且会为您创建一个拷贝。
关于c++ - 如何在没有任何临时字符数组作为变量的情况下将字符数组传递给 C++ 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24100200/