C_and_CPP 板


LINE

最近在写一个程式,其中需要做下面的工作, 主要是将某个档案内依特定格式储存的资料 每一栏的资料分别存放至4个变数或阵列中, 最後输出至萤幕 举例来说,输入档的内容为: John 4 Mary 5 Harry 8 Jason 21 那麽程式当中则分别用str1, a, str2, b四个变数来存放每一栏的资料 (即第一行中str1="John", a=4, str2="Mary", b=5, 第二行中str1="Harry", a=8, str2="Jason", b=21) 所以第一个就想到用sscanf做 以下是简化过的程式码: #include<stdio.h> #include<stdlib.h> #include<string.h> int main(void){ int i; int count=0; char input[30]; char str1[5], str2[5]; int a,b; while(fgets(input,25,stdin)!=NULL){ input[strlen(input)-1]='\0'; sscanf(input,"%s %d %s %d", str1, &a, str2, &b); printf("str1=%s a=%d str2=%s b=%d\n", str1, a, str2, b); count++; } return 0; } 之所以要把每一行的'\n'改为'\0'是为了往後程式的需要。 但输出的结果却是: str1=John a=3 str2=Mary b=4 str1= a=8 str2=jason b=21 之後将str1的长度加大就没问题了, 但还是想了解一下为什麽长度刚好的时候没办法抓到值呢? 谢谢 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.70.109.48 ※ 编辑: subeyes 来自: 203.70.109.48 (06/18 18:48)
1F:推 ianfang:你哪有长度刚好 字串最後还要放'\0' 06/18 18:49
2F:→ subeyes:那麽为什麽第二列的str2还是可以顺利印出呢? 06/18 21:25
3F:推 ianfang:C不做边界检查 这是无法预期的结果 运气好罢了 06/18 22:19
4F:→ subeyes:但我试过很多次 每一次都是str1抓不到 str2抓得到 06/18 23:07
5F:→ subeyes:如果是机率问题 不是应该有时str1抓得到 有时str2抓不到? 06/18 23:08
6F:→ subeyes:sry 因为我还不太了解为什麽会这样 06/18 23:08
7F:推 VictorTom:对於这种错误的程式码造成的意外/不意外的结果.... 06/18 23:26
8F:→ VictorTom:小弟我觉得asm/memory/register拉出来自己看吧.... 06/18 23:27
9F:→ VictorTom:真有心研究的话, 是可以彻底了解运作的机制, 错误的原因 06/18 23:27
10F:→ VictorTom:以及知道为什麽明明说是机率却常常都是只有谁的问题.... 06/18 23:28
11F:→ subeyes:好的 感谢二位的解答 :) 06/18 23:30
12F:推 VictorTom:不然给您的简单的提示, 不要只看%s印出来的字串.... 06/18 23:30
13F:→ VictorTom:把str1与str2"每一个"都watch一下, 看看每一行执行完它 06/18 23:31
14F:→ VictorTom:们的变化; 比如用memory看str1与str2, 或比较'稿刚'把 06/18 23:32
15F:→ VictorTom:str1[0]~[4]与str2[0]~[4]都拉出来看一下.... 06/18 23:32
16F:→ VictorTom:因为表面上是str1[0]被覆写了'\0'所以才什麽都不印:) 06/18 23:34
17F:推 VictorTom:您想了解原因, 就要找到为什麽str1[0]被错误覆写到了. 06/18 23:36







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP