我是C的新手,我正在尝试编写一个程序,该程序读取包含多个二进制整数的文件,并以相反的顺序打印出整数。 测试文件中的整数是: 200 300 -145629 67 11111111 -1 8000 0
整数是使用其他文件的二进制输出编写的,因此您无法正常读取该文件。 这是我到目前为止的代码:
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h> #include <sys/types.h>
int main(int argc, char *argv[]){
int *integers;
char *file;
int fd;
struct stat fileStat;
int value;
int i;
if(argc != 2){
fprintf(stderr, "usage: intrev <input file> <output file>\n");
exit(1);
}
file = argv[1];
fd = open(file, O_RDONLY);
if(fd < 0){
fprintf(stderr, "error opening file\n");
exit(1);
}
if(fstat(fd, &fileStat) < 0){
fprintf(stderr, "error getting file size\n");
exit(1);
}
integers = malloc(fileStat.st_size * sizeof(int));
for(i = 0; i < fileStat.st_size; i++){
value = read(fd, integers + i, sizeof(int));
if(value == -1){
fprintf(stderr, "error reading file\n");
exit(1);
}
}
for(i = fileStat.st_size - 1; i >= 0; i--){
printf("%d\n", *integers + i);
}
if(close(fd) != 0){
fprintf(stderr, "error closing file -- quitting\n");
exit(1);
}
return(0);
}
我需要使用fstat和malloc()来设置数组大小。 程序编译没有错误,但运行时,我得到的数字231到200如下: 231 230 229 。 。 。 201 200
我有什么不正确的?非常感谢任何帮助。
答案 0 :(得分:1)
for(i = fileStat.st_size - 1; i >= 0; i--){
printf("%d\n", *integers + i);
}
答案 1 :(得分:1)
这一行
printf("%d\n", *integers + i);
相当于
printf("%d\n", integers[0] + i);
由于运营商的优先权。
您可以使用:
printf("%d\n", *(integers + i));
或
printf("%d\n", integers[i]);
答案 2 :(得分:1)
您正在分配一个比相关文件大的数组。你的'malloc'应该分配'filestat.st_size'字节,从而为'filestat.st_size / sizeof(int)'元素腾出空间。
你对'read()'操作的错误处理是错误的引用: 如果当前文件偏移量处于或超过文件末尾,则不读取任何字节,并且“read()”返回零。
尝试修复这些......
你当然也应该修正R. Sahu指出的错误
答案 3 :(得分:0)
请尝试以下代码
#include <stdio.h>
main()
{
FILE *file;
myFile = fopen("Somenumbers.txt", "r");
//read file into array
int numberArray[16];
int i;
for (i = 0; i < 16; i++)
{
fscanf(file, "%1d", &numberArray[i]);
}
for (i = 0; i < 16; i++)
{
printf("Number is: %d\n\n", numberArray[i]);
}
}