【发布时间】:2016-11-17 22:03:42
【问题描述】:
我有一个包含 32 个二进制数字的文本文件,每个数字都在单独的行中,每个数字有 8 个字符长。我想将它们作为字符串存储在mem 数组中。
现在,这段代码如下所示:
char mem[32][9];
char line[9];
FILE *file_pointer;
file_pointer = fopen(filename, "r");
if (file_pointer == NULL) {
printf("Failed to open file \"%s\"!", filename);
} else {
int i = 0;
while (fgets(line, sizeof line, file_pointer)) {
memcpy(mem[i], line, 8);
mem[i][8] = '\0';
i++;
}
}
fclose(file_pointer);
不幸的是,我仍然在line 中得到换行符,所以我的数组无法正确显示。
这是我打印数组时的控制台:
00 00110100
01
02 01111100
03
04 10011100
05
06 10010101
etc...
我打印数组的代码:
for (i = 0; i < 32; i++) {
if (i >= 10) {
printf("%d", i);
} else {
printf("%c%d", '0', i);
}
printf("\t%s\n", mem[i]);
}
我也尝试过使用:
strtok(line, "\n");
line[strcspn(line, "\r\n")] = '\0';
【问题讨论】:
-
memcpy(mem[i],line,8);如果line少于 8 个字符,会发生什么? -
将
line[9]更改为line[100]。并将memcpy更改为strncpy。 -
char line[9];-->char line[10];: 8 +\n+\0 -
另外,如果要打印带前导零的两位数,请使用
printf("%02d", i) -
@VladfromMoscow 例如输入
00110100+enter ==> fgets ==>00110100\0(\n保持标准输入)