gpt4 book ai didi

c - 在 ANSI C 中用 fread 读取整数

转载 作者:行者123 更新时间:2023-12-02 01:12:13 25 4
gpt4 key购买 nike

我正在用 C 编写一个程序,我正在使用 fread 读取一个文本文件,但我无法正确读取整数。

文本文件中a的值为16,我得到的输出是:

 a= 538976288

我使用了一个成功读取二进制文件的类似代码。我想了解在 c 中读取 ASCII 表的最佳方法是什么。

表的大小由文件顶部的整数给出。数据之间用空格分隔。

这是我写的简单代码:

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

int main(int argc, char *argv[])
{
int a, flag_fread;
FILE * p_finput = NULL;
char * filename = NULL;

filename = malloc(sizeof(char) * (strlen(argv[1]) + 1));
strncpy(filename, argv[1],strlen(argv[1]));
filename[strlen(argv[1])] = '\0';

p_finput = fopen(filename, "r");
if (p_finput == NULL)
{
printf("couldn't open %s \n", filename);
abort();
}


flag_fread = fread(&(a), sizeof(int), 1, p_finput);

printf("a= %d \n", a);

fclose(p_finput);
free(filename);
return 0;
}

最佳答案

fread 以原始二进制形式读取文件中的数据。当数据以这种方式存储时,它会起作用,例如 fwrite 。处理文本时,您可以使用 fscanf但是建议不要使用它,因为它不进行任何边界检查,这会导致缓冲区溢出。

更好的做法是使用 fgets 读取文件然后使用 sscanf以获得所需的值。例如:

char buffer[100];
int itemsScanned = 0;
if(fgets(buffer, 100, p_finput) != NULL){
itemsScanned = sscanf(buffer, "%d", &a);
}
/* check itemsScanned & continue */

关于c - 在 ANSI C 中用 fread 读取整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16065599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com