读书人

gets的请问

发布时间: 2013-08-09 15:16:24 作者: rapoo

gets的请教
本帖最后由 liyoushihaer 于 2013-07-31 11:36:07 编辑 C语言中如果我定义了
char *p;
gets(p);
printf("%s\n",p);
这样合法吗?如果不合法有什么问题 ?
还有char *p="string china";这样定义是存放在什么地方的啊?如何存放的求大神解答!
求解答 C
[解决办法]
这样定义的指针是“野指针”,可能不出现段错误。没有合法不合法的情况,只有不安全,是程序有问题。
char *p = "string china";该指针变量存放了后面指针存放的地址值,由于字符串常量存放在只读数据段,所以该地址值是只读数据段的地址值。
[解决办法]
1、gets之前,需要分配足够的空间,比如char p[32];
2、gets不安全,一般用fgets函数替代,比如fgets(p, 32, stdin);
3、char *p="string china"相当于p是常量指针,其内容不能被修改。

引用:
C语言中如果我定义了
char *p;
gets(p);
printf("%s\n",p);
这样合法吗?如果不合法有什么问题 ?
还有char *p="string china";这样定义是存放在什么地方的啊?如何存放的求大神解答!
求解答

[解决办法]

char *p; //野指针,无内存空间,不能存放数据!

char *p ="string china";
存放在静态区,也就是代码段中,不能被修改的值!

读书人网 >C语言

热点推荐