使用 fscanf 循环
While loop with fscanf
int* data=(int*)malloc(size*sizeof(int));
int i=0,tmp;
while(fscanf(m,"%d",&tmp)!=EOF)data[i++]=tmp;
为什么它起作用而不是这个? :
int* data=(int*)malloc(size*sizeof(int));
int i=0;
while(fscanf(m,"%d",data[i++])!=EOF);
您需要传递地址:
while(fscanf(m,"%d",&data[i++])!=EOF);
检查 i < size
是否也是一个好主意。
主要:传递地址 &
,而不是值。
// fscanf(m,"%d",data[i++])
fscanf(m,"%d", &data[i++])
其他:
- 检查 1,而不是
EOF
- 测试索引限制
- 将数组索引视为类型
size_t
。
- 无需转换
malloc()
的结果。
考虑 malloc 风格 type *var = malloc(size * sizeof *var)
.
int *data = malloc(size * sizeof *data);
size_t i=0;
while(i < size && fscanf(m,"%d", &data[i++]) == 1);
int* data=(int*)malloc(size*sizeof(int));
int i=0,tmp;
while(fscanf(m,"%d",&tmp)!=EOF)data[i++]=tmp;
为什么它起作用而不是这个? :
int* data=(int*)malloc(size*sizeof(int));
int i=0;
while(fscanf(m,"%d",data[i++])!=EOF);
您需要传递地址:
while(fscanf(m,"%d",&data[i++])!=EOF);
检查 i < size
是否也是一个好主意。
主要:传递地址 &
,而不是值。
// fscanf(m,"%d",data[i++])
fscanf(m,"%d", &data[i++])
其他:
- 检查 1,而不是
EOF
- 测试索引限制
- 将数组索引视为类型
size_t
。 - 无需转换
malloc()
的结果。 考虑 malloc 风格
type *var = malloc(size * sizeof *var)
.int *data = malloc(size * sizeof *data); size_t i=0; while(i < size && fscanf(m,"%d", &data[i++]) == 1);