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错误.
我的问题是
" 我如何避免使用在temp其中使用的变量Main 1并直接将字符数组传递给func它的参数? "
而重要的条件是允许编辑传入的字符数组func.
我看到有许多答案阻止我这样做c[1]= '@';,我不能这样做,因为这条线对我来说非常重要.
您无法避免创建临时文件,因为写入字符串文字的内存是非法的,但您可以让编译器为您创建它.就拿你的参数std::stringinstead-这比更安全char的阵列,并会为您创建一个副本.