
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赋值时同样可能出现和第二种相同的危险。
但为什么说第一种是安全的呢? 展开
第一种:char *a; a = "Hi, you!";
第二种: char *a; scanf("%s",a);
我听说是这样: 第一种方法是很普通很正常的赋值方法,而第二种赋值很危险,因为a的值未定,完全由你输入的字符串决定,这就有可能因为输入字符串太长破坏了正常的程序或者数据。
但是, 在第一种方法里,a的赋值是在定义的下一句执行的,换句话说,a赋值时同样可能出现和第二种相同的危险。
但为什么说第一种是安全的呢? 展开
展开全部
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的空间里,所以也不安全
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的空间里,所以也不安全
展开全部
楼上的说法说错的
第一种是安全的,因为它是在编译时就为它赋值,无论字符串的长短,此时的程序结构还没有固定,它都能灵活的赋值,而不会破坏程序的结构;
第二种是在程序编译完,执行程序时的“动态处理”,(姑且这么称呼它吧),所以,按照第二种方式执行时,如果字符串太长,预留空间不足,便有可能破坏程序的结构。
学习程序的执行原理,你便会对这方面有一些了解
第一种是安全的,因为它是在编译时就为它赋值,无论字符串的长短,此时的程序结构还没有固定,它都能灵活的赋值,而不会破坏程序的结构;
第二种是在程序编译完,执行程序时的“动态处理”,(姑且这么称呼它吧),所以,按照第二种方式执行时,如果字符串太长,预留空间不足,便有可能破坏程序的结构。
学习程序的执行原理,你便会对这方面有一些了解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2008-07-18
展开全部
第一种同样不安全,真正安全的做法应该是这样:
char *a="Hi,you!";
char *a="Hi,you!";
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char *a; scanf("%s",a);
我感觉不能通过编译
我感觉不能通过编译
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询