C++ 在函数内按索引更改数组

c++ change array by index inside function

本文关键字:数组 索引 函数 C++      更新时间:2023-10-16
void changeArray(char* str1) {
str1[0] = 'f';
}
int main() {
char* msg1 = "andrew";
changeArray(msg1);
cout << msg1 << endl;
return 0;
}

嗨,伙计们,我不明白为什么我会遇到分段错误。 函数内部的索引无法访问指针?(C++(

您正在尝试修改字符串文本,这会导致未定义的行为。

尝试修改字符串文本会导致未定义的行为:它们可能存储在只读存储(如 .rodata(中或与其他字符串文本组合:

const char* pc = "Hello";
char* p = const_cast<char*>(pc);
p[0] = 'M'; // undefined behavior

而且,自 C++11 年以来不允许char* msg1 = "andrew";

在 C 语言中,字符串文字的类型是char[]的,可以直接分配给(非常量(char*。C++03 也允许它(但弃用了它,因为文字在 C++ 中const(。C++11 不再允许在没有演员的情况下进行此类任务。

您可以改为构造和传递char数组。

字符串文本可用于初始化字符数组。如果一个数组像char str[] = "foo";一样初始化,str将包含字符串"foo"的副本。

例如

int main() {
char msg1[] = "andrew";
changeArray(msg1);
cout << msg1 << endl;
return 0;
}

int main()中,您将 msg1 声明为指向字符的指针,而不是字符数组。这样做:char msg1[] = "andrew";.