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