关于gets和puts的疑问?

发霉饼干 2010-04-23 10:16:22
我在VC++6.0中编译
#include<stdio.h>
main()
{
char *a;
gets(a);
printf("%s\n",a);
}


输入123123回车;
显示的是 123123
press and key to continue
printf的输出好像根本没输出!
123123
是我输的!
改成
#include<stdio.h>
main()
{
char *a;
gets(a);
puts(a);
}
和上面的一样,为什么会这样啊 ,
gets(a);
的意思不是从键盘读取一个字符串存入a吗?
...全文
208 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2010-04-24
  • 打赏
  • 举报
回复
帮顶。
匚匚 2010-04-23
  • 打赏
  • 举报
回复
至于gets的不安全性,可以看看这里对此函数的修改!http://blog.csdn.net/zhw952/archive/2010/04/14/5485944.aspx
jackyjkchen 2010-04-23
  • 打赏
  • 举报
回复
除了内存分配问题,我觉得你应该在gets后加一个getchar清理IO缓冲。

另外,对于控制台fgets基本没用,我试过,还是会越界,微软的gets_s最安全,但要VS2005以上
匚匚 2010-04-23
  • 打赏
  • 举报
回复
你可以看一下这个例子,应该可以明了:
int i;
int *j=&i;
scanf("%d",j); //存入 j 所指向的变量 不是存入j中
或 scanf("%d",&i);//存入变量i所对应的地址
以上两种输入语句,都能给i赋值
txyjian 2010-04-23
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
main()
{
char *a;
a = malloc(100);
gets(a);
printf("%s\n",a);
}

必须用malloc函数分配内存
gets是蠕虫病毒的始作俑者,建议改用fgets
发霉饼干 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sunle818 的回复:]
vc6.0会报内存错误~
[/Quote]
我的没有报错,用的是vc++6.0;
  • 打赏
  • 举报
回复
vc6.0会报内存错误~
  • 打赏
  • 举报
回复
我是用win-tc编译就通过了........
  • 打赏
  • 举报
回复
确切的说是 没有分配空间....
匚匚 2010-04-23
  • 打赏
  • 举报
回复
是将值存入a所指向的内存,不是存入a中。现在a只是被你定义了,但没有赋值或初始化,是个野指针。
不用char a[100];也可以的,比较用动态分配内存:
char *p=(char *)malloc(sizeof(char)*100);//当然需要检查是否分配成功,用完后,还有释放free
  • 打赏
  • 举报
回复
靠 你应该定义为一个数组的......char a[] 因为你的*a 只有一个字符的空间
发霉饼干 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sunle818 的回复:]
引用 5 楼 fameibinggan 的回复:
引用 3 楼 sunle818 的回复:
没错啊 存入a 然后再打印 出123123啊!

但我 用的时候就这样啊 ;
根本没打印!


我的打印了啊~
[/Quote]
你用的什么编译器啊
  • 打赏
  • 举报
回复
是不是你的 编译器有问题 你用别的编译器再试试!
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fameibinggan 的回复:]
引用 3 楼 sunle818 的回复:
没错啊 存入a 然后再打印 出123123啊!

但我 用的时候就这样啊 ;
根本没打印!
[/Quote]

我的打印了啊~
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fameibinggan 的回复:]
我的意思就是说。gets();
好像没什么用;
[/Quote]

怎么会没用了 你要存入字符串 就得用它啊~
只是 gets和puts是 非格式化输入输出.
而 scanf() 和 printf() 是格式化输入输出, 也就是那个有%符号的!
发霉饼干 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sunle818 的回复:]
没错啊 存入a 然后再打印 出123123啊!
[/Quote]
但我 用的时候就这样啊 ;
根本没打印!
发霉饼干 2010-04-23
  • 打赏
  • 举报
回复
为什么要用a[100]
char *a
不是也可以保存字符串吗?
难道是因为char *a没有被分配空间!
  • 打赏
  • 举报
回复
没错啊 存入a 然后再打印 出123123啊!
发霉饼干 2010-04-23
  • 打赏
  • 举报
回复
我的意思就是说。gets();
好像没什么用;
白云飘飘飘 2010-04-23
  • 打赏
  • 举报
回复
main()
{
char a[100];
gets(a);
printf("%s\n",a);
}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧