int main()
{
char *t1 = "Hi hello";
char t2[] = " strcat";
printf("%s", strcat(t1, t2));
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个程序时,它给了我分段错误
int main()
{
char t1[] = "Hi hello";
char *t2 = " strcat";
printf("%s", strcat(t1, t2));
}
Run Code Online (Sandbox Code Playgroud)
而当我运行下一个程序时,它运行正常并显示连接的字符串.为什么会这样 ?
这个问题非常封闭.只是想添加摘要.我理解的要点是:对于以这种方式声明的变量
char *t1 = "hi hello";
Run Code Online (Sandbox Code Playgroud)
只需确保添加类型限定符const.因为默认情况下它是只读存储器.不惜任何代价,我们无法修改数据.例如
t1[0] = "L";
Run Code Online (Sandbox Code Playgroud)
是不被允许的.以这种方式声明的变量不受我们控制,并且在程序的生命周期内将永久保留.我们甚至无法释放那段记忆.
char t1[10] = "hi hello";
Run Code Online (Sandbox Code Playgroud)
这样我们就可以更好地控制内存.我们被允许修改数组.只要范围消失,分配的内存就会被释放.
char t1[] = "hi hello"; char t2[8] = "hi hello";
Run Code Online (Sandbox Code Playgroud)
两个声明t1和t2非常相同,顺序分配了8个字符位置.
希望我有道理.如果没有请编辑.:)