C 从文件打印整数
我在读取整数文件时遇到一些问题。我想在终端上打印文件(input.txt)中的每个整数。input.txt由每行一个整数构成 Input.txt:C 从文件打印整数,c,C,我在读取整数文件时遇到一些问题。我想在终端上打印文件(input.txt)中的每个整数。input.txt由每行一个整数构成 Input.txt: 1234 234 9083 8738 34 345678 30920 代码: 我的代码出了什么问题 看起来您有一个包含数字的文本文件。您试图读取它,就好像它是一个包含int的二进制文件一样。字符串“345678”是一个六字节的字符序列。int值345678是一个与平台相关的四字节(通常)位序列……可以通过查看您的第一个输出编号875770417进行
1234
234
9083
8738
34
345678
30920
代码:
我的代码出了什么问题 看起来您有一个包含数字的文本文件。您试图读取它,就好像它是一个包含int的二进制文件一样。字符串
“345678”
是一个六字节的字符序列。int
值345678
是一个与平台相关的四字节(通常)位序列……可以通过查看您的第一个输出编号875770417
进行验证,十六进制为34333231
,是“1234”
小尾端的ASCII字节,您的第一个文本字符串。mmap
对于此处的作业来说是完全错误的工具。int i;文件*fp=fopen(“input.txt”,“r”);而(fscanf(“%d”,&i)==1)printf(“%d\n”,i);
或字符行[256];文件*fp=fopen(“input.txt”,“r”);而(fgets(line,sizeof line,fp))fputs(line,stdout)代码>看起来您有一个包含数字的文本文件。您试图读取它,就好像它是一个包含int的二进制文件一样。字符串“345678”
是一个六字节的字符序列。int
值345678
是一个与平台相关的四字节(通常)位序列……可以通过查看您的第一个输出编号875770417
进行验证,十六进制为34333231
,是“1234”
小尾端的ASCII字节,您的第一个文本字符串。mmap
对于此处的作业来说是完全错误的工具。int i;文件*fp=fopen(“input.txt”,“r”);而(fscanf(“%d”,&i)==1)printf(“%d\n”,i);
或字符行[256];文件*fp=fopen(“input.txt”,“r”);而(fgets(line,sizeof line,fp))fputs(line,stdout)代码>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <zconf.h>
#include <sys/mman.h>
int main(int argc, char** argv){
int fd = open(argv[1], O_RDONLY);
if(fd == -1){
printf("Error with input file\n");
return -1;
}
struct stat buf;
int fstatTest = fstat(fd, &buf);
if (fstatTest == -1) {
printf("Error with fstat\n");
return -5;
}
int* map = (int*) mmap(NULL,buf.st_size,PROT_READ,MAP_SHARED,fd,0);
if(map == MAP_FAILED){
close(fd);
printf("Error with mmap");
return -4;
}
for(int i = 0; i < buf.st_size/sizeof(int); i++){
printf("%d\n",map[i]);
}
if((munmap(map,buf.st_size)<0)){
close(fd);
printf("Error with munmap\n");
}
if(close(fd) <0){
printf("Error while closing input");
return -4;
}
return 0;
}
875770417
875770378
942684426
926419507
856307763
875760180
943142453
959460106