从末尾读取2个文件行并将它们放入数组中

时间:2016-11-22 18:56:35

标签: c arrays file-io

我有一个输入文件,其中有2个非常长的数字(某处为10 ^ 4位),用空格分隔。我要做的就是读取它们,从最后一位到第一位,将它们放在两个独立的数组中。 以下是2个简短数字的示例:

1234 5678

我的程序需要像[] = {4,3,2,1}和n [] = {8,7,6,5}这样的数字才能工作。是可能的,还是我必须阅读它们并重新排序数字?谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

嗯,你至少有3个选择,你已经说过了。

另外两个选项是:

  • 在每个char读取中创建一个fseek(),我不推荐,因为你的程序会很慢。
  • 使用内存映射文件,它基本上将任意文件映射到内存地址,这样,你得到的就是你想要的,但是依赖于平台相关的解决方案,因此,适用于Windows,Linux的解决方案。将成为不同的人。

POSIX兼容(例如Linux)解决方案类似于:

#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>

#define error(msg) \
{                  \
    perror(msg);   \
    exit(-1);      \
}

int main()
{
    int i;          /* Loop index.     */
    struct stat s;  /* stat structure. */
    int  fd;        /* File descriptor.*/
    char *file;     /* Mapped file.    */

    /* Open the file. */
    if ( (fd = open("file", O_RDONLY)) < 0 )
        error("Failed open file");

    /* File size. */
    if ( fstat(fd, &s) < 0 )
        error("Failed to stat file");

    /* Maps the file into memory. */
    if( (file = mmap(0, s.st_size, PROT_READ, MAP_PRIVATE, fd, 0)) == MAP_FAILED)
        perror("Failed to map file");

    /* Starts reading. */
    for (i = s.st_size; i >= 0; i--)
        printf("%c", file[i]);

    return 0;
}

如果您想在Windows中执行某些操作,我建议您阅读:Managing Memory-Mapped Files

为了更好地理解上述代码,请参阅openfstatmmap