首先,这不是家庭作业。只是想了解为什么我会看到我在屏幕上看到的内容。
下面的东西(我自己的工作)当前需要一个输入文件并将其作为二进制文件读取。我希望它将读取的每个字节存储在一个数组中(供以后使用)。为简洁起见,输入文件 (Hello.txt) 仅包含“Hello World”,没有撇号。
int main(int argc, char *argv[]) {
FILE *input;
int i, size;
int *array;
input = fopen("Hello.txt", "rb");
if (input == NULL) {
perror("Invalid file specified.");
exit(-1);
}
fseek(input, 0, SEEK_END);
size = ftell(input);
fseek(input, 0, SEEK_SET);
array = (int*) malloc(size * sizeof(int));
if (array == NULL) {
perror("Could not allocate array.");
exit(-1);
}
else {
input = fopen("Hello.txt", "rb");
fread(array, sizeof(int), size, input);
// some check on return value of fread?
fclose(input);
}
for (i = 0; i < size; i++) {
printf("array[%d] == %d\n", i, array[i]);
}
为什么在上面的 for 循环中使用 print 语句会导致输出看起来像这样
array[0] == 1819043144
array[1] == 1867980911
array[2] == 6581362
array[3] == 0
array[4] == 0
array[5] == 0
array[6] == 0
array[7] == 0
array[8] == 0
array[9] == 0
array[10] == 0
像这样
printf("array[%d] == %d\n", i, ((char *)array)[i]);
使输出看起来像这样(每个字符的十进制 ASCII 值)
array[0] == 72
array[1] == 101
array[2] == 108
array[3] == 108
array[4] == 111
array[5] == 32
array[6] == 87
array[7] == 111
array[8] == 114
array[9] == 108
array[10] == 100
? 如果我将它作为二进制文件读取并想逐字节读取,为什么不使用第一个打印语句获得正确的 ASCII 值?
在相关说明中,如果我发送的输入文件不是文本文档(例如 jpeg)会怎样?
抱歉,这完全是一件微不足道的事情,但我似乎无法弄清楚为什么。