我正在编写一段代码,其中一部分正在阅读"记录"从文件到n长度数组,n作为参数给出。文件中的记录具有恒定长度(在本例中为1024)并且仅包含数字,空格和低位字母。每个记录都以\ n结束。我使用以下结构来保留一条记录:
react-router v4
用于提取n个并存储在n长度记录数组中的代码以这样的方式编写:
typedef struct{
char rec[1024];
} record;
当我检查此操作的输出时,结果发现数组recs的第一个元素包含所有记录,第二个除了第一个以外的所有记录,依此类推,而不是在数组的每个元素中保留一个。我有点失落,因为我认为它应该将每条记录存储在数组的不同元素中。 正如所建议的那样,我还提供了打开文件和打印数组元素的代码:
record * recs=malloc(n*sizeof(record));
size_t read=fread(recs,sizeof(record),(size_t)n,f);
答案 0 :(得分:6)
问题是您的记录rec
不是零终止字符串。
因此,使用%s
进行打印会显示所有记录,因为打印会一直持续到'\0'
为止。
因此要么确保在每个rec
中添加零终止,要么使用其他打印方式而不是%s
。
BTW:如果recs
内没有任何零终止,你实际上有未定义的行为。
这个小程序模仿了这个问题:
#include <stdio.h>
struct r {
char c[1];
};
int main(void) {
int i;
struct r recs[4] = {{'a'}, {'b'}, {'c'}, {'\0'}};
// ^^^^^
// Just to stop printing here
for (i=0; i<3; i++)
{
printf("%d %s\n", i, recs[i].c);
}
return 0;
}
输出:
0 abc
1 bc
2 c