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

【提问】关于fscanf的有关问题

2012-10-17 
【提问】关于fscanf的问题如图所示,执行完一次fscanf(图中的红框部分)后,居然有两个数组成员被赋了值,这是什

【提问】关于fscanf的问题




如图所示,执行完一次fscanf(图中的红框部分)后,居然有两个数组成员被赋了值,这是什么情况?
如果继续执行循环的话,则是
执行完一次fscanf,有时候有一个变量被赋值,有时候是两个变量被赋值

后果就是当读到数组最后一个成员时,就会发生溢出,图中的num变量就会被覆盖,后来我是给数组大小多开了1,才暂时解决了问题,但是不懂这是为啥

读取的文件的内容是这样的:


[解决办法]
这种scanf是很危险的。
short 是16位的,int是32位的。
unsigned short int n;
scanf("%d", &n);
scanf函数见到%d的时候,会把读取的整数按照int的格式写到&n的位置去。
也就是说,scanf会在&n的位置写4个字节,因为scanf不知道你给他提供的指针实际上是short类型的。

fscanf是一样的。
建议把short变成int型。

C/C++ code
#include <stdio.h>int main(){    short arr[10];    for( int i=0; i<10; i++)        scanf("%d", &arr[i]);   //会出问题的    return 0;}
[解决办法]
如果非要使用short的话,可以使用“%hd”来读取数据,就没有问题了。
h:half 就是int的一半的意思。

C/C++ code
#include <stdio.h>int main(){    short arr[10];    for( int i=0; i<10; i++)        scanf("%hd", &arr[i]);   //安全    return 0;} 

热点排行