运行以下程序是否安全?
#include<stdio.h>
int main()
{
char *p="hello";
p="long string here";
printf("%s",p);
return 0;
}
我跑了这个,看到它正在给出正确的输出。但是,以下陈述是否安全?
p="long string here";
这不会导致用这些字符填充未分配的空间吗?
答案 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);