将文件中的数字读入C中的数组

时间:2014-09-23 06:29:28

标签: c arrays file

我是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

我有什么不正确的?非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

for(i = fileStat.st_size - 1; i >= 0; i--){ 
        printf("%d\n", *integers + i); 
    } 
在这些行中,我认为你是对整数的影响,而不是增加i的值,它实际上是从同一位置读取并在其中添加i,这在每次迭代中都会递减。 所以纠正这个从整数+ i和de reffer读取。 我是一名c ++程序员,所以我没有提供任何代码,但我已经指出了我认为的逻辑错误。 希望这会有所帮助。 如果有帮助,请将此评为答案。

答案 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]);
    }

}