c语言中char*的初始化问题

初始化一个字符指针变量,比较两种第一种:char*a;a="Hi,you!";第二种:char*a;scanf("%s",a);我听说是这样:第一种方法是很普通很正常的赋... 初始化一个字符指针变量,比较两种
第一种:char *a; a = "Hi, you!";
第二种: char *a; scanf("%s",a);
我听说是这样: 第一种方法是很普通很正常的赋值方法,而第二种赋值很危险,因为a的值未定,完全由你输入的字符串决定,这就有可能因为输入字符串太长破坏了正常的程序或者数据。
但是, 在第一种方法里,a的赋值是在定义的下一句执行的,换句话说,a赋值时同样可能出现和第二种相同的危险。
但为什么说第一种是安全的呢?
展开
 我来答
xndcn
2008-07-18 · TA获得超过826个赞
知道小有建树答主
回答量:287
采纳率:0%
帮助的人:466万
展开全部
char *a;
a是一个字符型指针,因为赋指时没有为a分配内存空间,所以a的指向是不确定的,那么a就有可能指向内存的重要区域
第二种方法,scanf("%s",a);直接将输入的字符串写入a指向的空间,所以极有可能破坏重要数据,引起系统崩溃。如果真要这么用,要先分配空间char *a=(char *)malloc(12);

而第一种方法,a = "Hi, you!";,其实在编译器看来,先为"Hi, you!"分配了一块空间,"Hi, you!"其实是它所在的空间首地址。所以a = "Hi, you!";其实是将a重新指向"Hi, you!"的空间,所以没问题。

注意,char *a="Hi,you!";和char *a; a = "Hi, you!"; 是一样的。
而不同于char *a; strcpy(a,"Hi, you!");
这种是不对的,是将"Hi,you!"直接复制到a的空间里,所以也不安全
sundaowei1234
2008-07-18 · 超过23用户采纳过TA的回答
知道答主
回答量:82
采纳率:0%
帮助的人:0
展开全部
楼上的说法说错的

第一种是安全的,因为它是在编译时就为它赋值,无论字符串的长短,此时的程序结构还没有固定,它都能灵活的赋值,而不会破坏程序的结构;

第二种是在程序编译完,执行程序时的“动态处理”,(姑且这么称呼它吧),所以,按照第二种方式执行时,如果字符串太长,预留空间不足,便有可能破坏程序的结构。

学习程序的执行原理,你便会对这方面有一些了解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2008-07-18
展开全部
第一种同样不安全,真正安全的做法应该是这样:

char *a="Hi,you!";
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
baoyu24321
2008-07-18
知道答主
回答量:69
采纳率:0%
帮助的人:0
展开全部
char *a; scanf("%s",a);

我感觉不能通过编译
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式