【提问】关于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型。
#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的一半的意思。
#include <stdio.h>int main(){ short arr[10]; for( int i=0; i<10; i++) scanf("%hd", &arr[i]); //安全 return 0;}