如何解决请解释输出,其中将C字符指针分配给不使用Malloc的新内存
#include <stdio.h>
int
main ()
{
char *a = "Hello";
a = "Hello_World";
printf ("%s",a);
return 0;
}
现在此程序返回已更正并打印“ Hello_World”。
但是我记得读过关于更改一次初始化的字符串指针的信息,我必须使用malloc分配内存,然后输入字符串的新值。
请解释?尤其是分配给字符串的新更改值的内存在哪里,旧内存呢?
解决方法
使用gcc -S查看生成的汇编程序。
您会看到类似这样的东西
.LC0:
.string "Hello"
.LC1:
.string "Hello_World"
它在.data节中作为常量分配。 然后它将像这样使用
movq $.LC0,-8(%rbp)
movq $.LC1,-8(%rbp)
movq -8(%rbp),%rax
movq %rax,%rsi
movl $.LC2,%edi
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。