我在尝试从文本文件中读取整数时遇到了麻烦:
#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
。
你能告诉我为什么会这样吗?
答案 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}}
答案 2 :(得分:1)
除了有关fread()
用法的答案外,您还没有正确地将预期的参数传递给您的函数。虽然fread()
需要指针作为参数(指向变量)才能读入,但printf()
和fprintf()
都需要值(不是地址!)要打印的格式化参数。因此,参数传递中的相同语法适用于这两个函数:
printf("%d\n", op);
fprintf(f,"%d\n", op);
您可能还会发现这些SO帖子的有用信息:fread,reading text files with fread,fprintf。