搜索
查看: 1145|回复: 14
打印 上一主题 下一主题

请各位帮助

[复制链接]
跳转到指定楼层
楼主
发表于 2013-12-4 14:24:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
#include <stdio.h>
#include <stdlib.h>
int main()
{
        char coad[7];
    printf("请输入6位密码:");
    scanf("%s",&coad);
    printf("密  码:%s\n",coad);
        system("pause");
        return 0;
}
我从键盘输入8位密码,变量coad也接受了,可我定义的它的下标是7呀,算上null零,应该最多放6位才对呀
是什么原因,请大家帮助解答,谢谢啦

最佳答案

查看完整内容

scanf("%s", ...)不会帮你检查预留的空间够不够 你可以强制scanf最多读取6个字符
沙发
发表于 2013-12-4 14:24:13 | 只看该作者
scanf("%s", ...)不会帮你检查预留的空间够不够

你可以强制scanf最多读取6个字符

  1. scanf("%6s", ...);
复制代码
板凳
发表于 2013-12-4 14:58:42 | 只看该作者
哦,这个啊
这是因为这样在计算机的眼里是合法的
但是计算机不可能提前知道数组的长度
所以多余的部分就会被写到计算机还没分配好的空间里
你这种情况是运气好,计算机没有反应
有时甚至会死机。。。
所以推荐用fgets()
fges()用法:
  1. fgets(变量名,sizeof(变量名),stdin);
复制代码
注意在进行指针运算时
要显式给出长度,就是:
  1. fgets(变量名,变量名长度,stdin);
复制代码
地板
发表于 2013-12-4 16:20:46 | 只看该作者
我貌似在群里看见过你了
5#
发表于 2013-12-5 09:27:30 | 只看该作者
cad20020601 发表于 2013-12-4 16:20
我貌似在群里看见过你了

什么?                                      
6#
发表于 2013-12-5 09:40:13 | 只看该作者
cad20020601 发表于 2013-12-4 16:20
我貌似在群里看见过你了

你在几群?我在①群,你QQ什么名?
7#
发表于 2013-12-5 09:41:18 | 只看该作者
rosynirvana 发表于 2013-12-4 16:53
scanf("%s", ...)不会帮你检查预留的空间够不够

你可以强制scanf最多读取6个字符

常识,大家都知道的,不用多说
8#
发表于 2013-12-5 11:30:23 | 只看该作者
4399APPLE 发表于 2013-12-5 09:41
常识,大家都知道的,不用多说

像你这种到处招摇的小白真是orz
你说的哪个东西不是常识?
lz明显不知道scanf的占位符可以设定最大读取长度,何来“大家都知道,不用多说”?

计算机当然知道数组的长度,局部变量的数组长度是写死进汇编代码里的,只是scanf不替你检查而已
再者,如果长度足够,fgets会把最后的换行符读进去,不trim掉比对会失败
再再者,现在的操作系统用户空间中的进程,内存访问越界不会死机,死机了也使比的原因
<-这些,都叫常识
9#
发表于 2013-12-5 15:03:03 | 只看该作者
rosynirvana 发表于 2013-12-5 11:30
像你这种到处招摇的小白真是orz
你说的哪个东西不是常识?
lz明显不知道scanf的占位符可以设定最大读取 ...

你说的lz是指谁?
10#
发表于 2013-12-5 15:46:59 | 只看该作者
4399APPLE 发表于 2013-12-5 15:03
你说的lz是指谁?

你不知道lz指的是“楼主”?
还是你觉得参与讨论的任何一人的id可以缩写成lz?
11#
发表于 2013-12-5 16:37:03 | 只看该作者
4399APPLE 发表于 2013-12-5 09:40
你在几群?我在①群,你QQ什么名?

我也是1群,名字叫月影の幻
12#
发表于 2013-12-5 16:37:26 | 只看该作者
cad20020601 发表于 2013-12-5 16:37
我也是1群,名字叫月影の幻

不过改成月影
13#
发表于 2013-12-5 16:37:46 | 只看该作者
cad20020601 发表于 2013-12-5 16:37
不过改成月影了

”是在名字里的
14#
发表于 2013-12-5 17:49:04 | 只看该作者
rosynirvana 发表于 2013-12-5 15:46
你不知道lz指的是“楼主”?
还是你觉得参与讨论的任何一人的id可以缩写成lz?
参与讨论的任何一人的id可以缩写成lz
                     
15#
发表于 2013-12-5 17:49:53 | 只看该作者
cad20020601 发表于 2013-12-5 16:37
不过改成月影了

我看看                  
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表