| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 425 人关注过本帖
标题:C语言 入门问题,怎样确保在获取字符时数量不会过界
只看楼主 加入收藏
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
结帖率:93.75%
收藏
已结贴  问题点数:20 回复次数:2 
C语言 入门问题,怎样确保在获取字符时数量不会过界
我要编写一段关于身份证号码判断的代码。但是在一开始的获取字符时就束手无策了。

程序代码:
#include"stdlib.h"
#include"string.h"
#include"stdio.h"
int main()
{
        int num;
    scanf("%d",&num);
        char m[100][19];
    for(int i=0;i<num;i++){
        scanf("%s",m[i]);
        m[i][19]=0;
    }
    {for(int i=0;i<num;i++){
        printf("%s\t",m[i]);
        
    }}
}


这里,我希望程序可以自动截取到17位为止的字符。因为在存放数据的时候C语言的规则是自动从指定首地址开始存放,并覆盖原有数据。我尤其注重尝试当我第一个m的值输入超过17位时,它就会导致,后面的测试语句输出时这第一个字符串长度超过17个,不多不少,正好就是我输入的m的长度,只是他超过17位的数据是被第二个m的值覆盖过了的。
我在程序里加了一句m[i][18]=0就是希望在这个位置重新赋值,用结束符合来终止程序访问。但从运行效果来看,没有起作用。
我也从网路上找了但没掌握方法,没有找到相关资料。

(本账号是刚刚申请注册的。所以没办法给分。。性子急,在线等。)by the way,我是自学编程的,想找个适合的论坛、杂志、网站或交流群啥的,都可以推荐。

[此贴子已经被作者于2015-10-27 19:03编辑过]

搜索更多相关主题的帖子: 身份证号码 C语言 
2015-10-27 18:19
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 楼主 书生牛犊
额-----大约是我的描述有问题。大家都没有看懂。。。。

图片附件: 游客没有浏览图片的权限,请 登录注册

        上面是测试抓图。问题很显然就出在‘\0’被覆盖了,我对m[i][18]的赋值是无用功。第二第三个测试‘\0’就没被覆盖,就是对的。


[此贴子已经被作者于2015-10-27 19:03编辑过]


φ(゜▽゜*)♪
2015-10-27 19:02
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:14 
不知所云
竟然还贴图,我想拷贝数据来问题细节也没办法
2015-10-28 09:46
快速回复:C语言 入门问题,怎样确保在获取字符时数量不会过界
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.062763 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved