首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请教小弟我这两个程序有什么有关问题么?还有什么不同么

2012-02-09 
请问我这两个程序有什么问题么?还有什么不同么?1 #include stdio.h2 #include stdlib.h3 intmain()4 {

请问我这两个程序有什么问题么?还有什么不同么?
1 #include "stdio.h"
2 #include "stdlib.h"
3 int main()
4 {
5 struct struct_str{
6 char* string;
7 }str;
8 str.string=(char*)malloc(sizeof(str)); //注意是sizeof(str)
9 fgets(str.string,2,stdin);
10 printf("%s",str.string);
11 return 0;
12 }

1 #include "stdio.h"
2 #include "stdlib.h"
3 int main()
4 {
5 struct struct_str{
6 char* string;
7 }str;
8
9 str.string=(char*)malloc(sizeof(char));
10 fgets(str.string,2,stdin);
11 printf("%s",str.string);
12 return 0;
13 }
14 

我在gcc -std=c99编译运行都通过

但请问我这两个程序有什么问题么?还有什么不同么?


[解决办法]
开辟缓冲区大小不一样啊
[解决办法]
第二个程序会出现内存覆盖问题。
fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。
由于sizeof(char)等于1,所以第二个程序中开辟的内存空间是1byte而却使用了2byte,导致后面的1byte内存的内容被置0。

[解决办法]
1 #include "stdio.h" 
2 #include "stdlib.h" 
3 int main() 
4 { 
5 struct struct_str{ 
6 char* string; 
7 }str; 

9 str.string=(char*)malloc(sizeof(char)); //得到内存为一字节
10 fgets(str.string,2,stdin); //在这str.string存储了两个字节的内容
11 printf("%s",str.string); //那么可能fgets函数不会考虑越界问题,我认为 ,没找到资料
free(str.string); //还要free();
12 return 0; 
13 } 
 

[解决办法]
有问题。

1、你先试试打印sizeof(str)和sizeof(char)的大小,看他们相同么?
2、他们的大小,特别是第二个,足够你放一个字符加一个字符串结束符吗?
3、malloc分配的内存用free释放了吗?


热点排行