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

标签 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);
}

这里如果我把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] = '@' 抛出段错误。

我的问题是

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

  2. 重要的条件是允许编辑角色 传入 func 的数组。

编辑

我看到有很多答案阻止我执行 c[1]= '@'; ,我不能这样做,因为那一行对我来说非常重要。

最佳答案

您无法避免创建临时对象,因为写入字符串文字的内存是非法的,但您可以让编译器为您创建它。取而代之的是 std::string 参数 - 这比 char 数组更安全,并且会为您创建一个拷贝。

关于c++ - 如何在没有任何临时字符数组作为变量的情况下将字符数组传递给 C++ 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24100200/

相关文章:

c++ - 具有连续存储的动态矩阵

c++ - 另一个虚拟模板解决方法

javascript - 在具有特定条件的 lodash 中添加和组合对象数组中的重复项

c - 为什么 C 编译器不警告与文字字符串不兼容的类型?

haskell - Haskell 是否在编译时连接字符串文字?

c++ - 英特尔 Embree 中的这个 union 有什么作用?

c++ - Xcode 和 Objective-C++ 找不到 <cstdio>

c++ - 计算文件中的 react 数

arrays - SwiftUI @State 数组不更新在 init() 期间附加的值

python - numpy 数组和返回上的 str() 方法