read函数读取的奇怪的int值

时间:2013-02-18 11:22:53

标签: c matrix posix

我正在进行练习,你需要在32位Little endian机器上阅读这种二进制文件:

  

30002000100020003000400050006000

这种文件描述了一个带有int元素的矩阵。前两个整数(3000和2000)描述了矩阵的行和列维度。 我遇到了一些麻烦,所以我开始做一些调试,我发现了

c = read(fd, &a, sizeof(int));

在a中写入奇怪的值,而不是普通的int,但是像808464435那样。我在64位机器上编程,Fedora 18,但是我看到了

printf("%d\n", sizeof(int));

这个整数仍然是4个字节。


这里有完整的代码

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>



int openFile(const char* path)
{
    int fd;
    fd = open(path, O_RDONLY);
    if(fd == -1)
    {
        perror("error in file opening\n");
        exit(EXIT_FAILURE);
    }
    return fd;
}

int readInt(int fd)
{
    int a,c;
    c = read(fd, &a, sizeof(int));
    if(c == -1)
    {
        perror("error in read\n");
        exit(EXIT_FAILURE);
    }
    return a;
}

void fillMatrix(int fd,int* matrix, int* rows, int* columns)
{
    *rows = readInt(fd);
    *columns = readInt(fd);
    matrix = calloc(((*rows) * (*columns)) + 1, sizeof(int));
    for(int i = 1; i <= (*rows) * (*columns); i++)
    {
        matrix[i] = readInt(fd);
    }
}

int main(int argc, char* argv)
{
    printf("%d\n", sizeof(int));
    exit(EXIT_SUCCESS);


    int fdA;
    int rowsA, columnsA;
    int *matrixA;
    fdA = openFile("/home/caterpillar/workspace/18Luglio2012/src/matrixA.txt");
    fillMatrix(fdA, matrixA, &rowsA, &columnsA);

    for(int i = 1; i <= rowsA * columnsA; i++)
    {
        printf("%d ", matrixA[i]);
    }


    close(fdA);
    return 0;
}

0 个答案:

没有答案