如何在没有任何临时char数组作为变量的情况下将字符数组传递给C++中的函数?

vik*_*cks 0 c++ arrays string-literals

我有以下代码

void func(char c[])  {
    c[1]= '@';
    std::cout<<c<<"\n"
             <<sizeof(c)<<"\n";
}

// Main 1
int main()  {
    char temp[6] = "pinta";
    func(temp);
}
Run Code Online (Sandbox Code Playgroud)

如果我将主要功能更改为以下内容

//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");
              ^
Run Code Online (Sandbox Code Playgroud)

经过一些谷歌搜索,我了解到第二个main没有传递任何字符数组,而是通过一个read only string literal当击中c[1] = '@'抛出一个seg错误.

我的问题是

  1. " 我如何避免使用在temp其中使用的变量Main 1并直接将字符数组传递给func它的参数? "

  2. 而重要的条件是允许编辑传入的字符数组func.

编辑

我看到有许多答案阻止我这样做c[1]= '@';,我不能这样做,因为这条线对我来说非常重要.

Pup*_*ppy 7

您无法避免创建临时文件,因为写入字符串文字的内存是非法的,但您可以让编译器为您创建它.就拿你的参数std::stringinstead-这比更安全char的阵列,并会为您创建一个副本.