我正在用C語言編寫程序,並且正在使用fread
讀取文本文件,我無法正確讀取整數。在ANSI中讀取fread的整數C
的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;
}
提示:十進制538976288是十六進制0x20202020;你的代碼從文本文件中讀取4個空格到'int'中。 –
請注意['fread()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fread.html)不用於閱讀'行';它不知道線是什麼,也不應該。如果你需要行,可以使用['fgets()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fgets.html)(或者在POSIX 2008系統上,['getline()']( http://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html)。這些設計用於讀取具有適當行結尾的行。 –
ok,fgets讀取一個字符串,但是如果我想要獲取該字符串,我應該怎麼做數字在一行? – simona