从C中的文件读取整数时遇到麻烦

时间:2016-07-23 07:38:27

标签: c printf fread

我在尝试从文本文件中读取整数时遇到了麻烦:

#include <stdio.h>
#include <string.h>

int main()
{  
    int op;

    /* Open file for both reading and writing */
    FILE *d = fopen("intento1.txt", "r");
    FILE *f = fopen("bubbletry.txt", "w+");

    /* Read and display data */
    fread(&op, 4, 1, d);

    printf("%d\n", &op);
    fclose(d);
    /* Write data to the file */
    fprintf(f,"%d\n",&op);

    fclose(f);

    return(0);
}

“intento1.txt”的第一个数字是30771, 但写在“bubbletry.txt”的文字是926363699。 你能告诉我为什么会这样吗?

3 个答案:

答案 0 :(得分:5)

因为你将intento1.txt的前4个字节,'3','0','7''7'读成一个整数。 '3'是0x33,'0'是0x30,'7'是0x37。因此,您最终在0x33303737中读取,但由于您使用的是小端架构,因此字节将反转为0x37373033,这是926363699的十六进制表示形式,其中ascii表示形式使用fprintf打印到该文件。< / p>

你想要的是从ascii表示中扫描整数,方法是拉入字符串然后转换它或使用fscanf之类的东西。请记住,数字的二进制表示与其ASCII表示形式不同。

答案 1 :(得分:3)

通常要读取整数等,您可以使用fread代替。它比fscanf( fp, "%d", &n ); 更方便。

{{1}}

例如,请检查http://www.cplusplus.com/reference/cstdio/fscanf/

答案 2 :(得分:1)

除了有关fread()用法的答案外,您还没有正确地将预期的参数传递给您的函数。虽然fread()需要指针作为参数(指向变量)才能读入,但printf()fprintf()都需要(不是地址!)要打印的格式化参数。因此,参数传递中的相同语法适用于这两个函数:

printf("%d\n", op);

fprintf(f,"%d\n", op);

您可能还会发现这些SO帖子的有用信息:freadreading text files with freadfprintf