我有以下代码:
#include <iostream>
using namespace std;
int main()
{
char* a = "foo";
char* b = "bar";
a = b;
cout << a << ", " << b << endl;
return 0;
}
这编译和工作,即。打印bar,
bar
。现在我想证明这里发生的事情不是复制字符串。我想改变b
并表明它a
也会改变。我想出了这个简单的代码:
#include <iostream>
using namespace std;
int main()
{
char* a = "foo";
char* b = "bar";
a = b;
b[1] = 'u'; // ← just this line added
cout << a << ", " << b << endl;
return 0;
}
…但它有段错误。为什么?有趣的是,下面的修改运行得很好:
#include <iostream>
using namespace std;
int main()
{
char* a = "foo";
char b[] = "bar"; // ← declaration changed here
a = b;
b[1] = 'u';
cout << a << ", " << b << endl;
return 0;
}
为什么它不像前一个那样出现段错误?我想我错过了指针样式和数组样式字符串初始化之间的一些重要区别。