使用指针时C中的内存分配

时间:2014-07-29 22:13:31

标签: c

运行以下程序是否安全?

 #include<stdio.h>
 int main()
 {
     char *p="hello";
     p="long string here";
     printf("%s",p);
     return 0;
 }

我跑了这个,看到它正在给出正确的输出。但是,以下陈述是否安全?

p="long string here";

这不会导致用这些字符填充未分配的空间吗?

2 个答案:

答案 0 :(得分:4)

该计划是安全的。两个字符串都是常量。你的指针既开始又结束指向一个常量字符串,它最终指向另一个字符串。不复制或移动任何内存块;没有必要分配任何东西。

如果引起混淆,只需更改指针引用的内容就不会将新内容复制到旧内容上。

答案 1 :(得分:3)

是的,你的程序没问题。语句p = "lkjh..."不会更改p之前指向的内容(hello),而是将指针p更改为指向新字符串。根本没有内存覆盖。

特别是,以下内容仍会打印hello

char *p="hello";
char *q = p; // now q and p point to the same place in memory
p="lkjhlkh jh kjhlkj kljh kljh jkl hlkj hklj hkjl hkjl hkjl hkjl hklj hkjl hk";
// this will print "hello"
printf("%s",q);