gpt4 book ai didi

c - 将文件的每一行作为字符串存储在数组中

转载 作者:行者123 更新时间:2023-11-30 19:01:15 24 4
gpt4 key购买 nike

我有一个如下所示的文件:

Tom
John
Sarah
...

我需要读取这个文件并将每个名称存储在一个数组中。行数未知并且可能会有所不同。我假设新行字符为 \n (当然这在文件中不可见)。

我必须使用 open 函数来提供我自己的缓冲。

这是我到目前为止所拥有的:

#define BUFFSIZE        4096

int main( int argc, const char* argv[] )
{
int n;
char buf[BUFFSIZE];

// Throw error if not exactly 2 arguments
if(argc != 2) {
printf("Usage: %s <file_name>\n", argv[0]);
exit(-1);
}

// open file and check if error thrown
int readFileDescriptor = open(argv[1], O_RDONLY);
if (readFileDescriptor == -1) {
printf("Error with file open\n");
exit (-1);
}

// Read until end of file was reached
while((n = read(readFileDescriptor, buf, BUFFSIZE)) > 0) {
// ... do something here
}
if(n < 0) {
printf("Read error\n");
}

close(readFileDescriptor);
return(0);
}

首先,如果名称由于缓冲区而在中间被切断,我不知道如何解决该问题。其次,如何按 /n 字符拆分并将每个名称放入数组中。对于数组,我被告知使用带有 malloc 和 realloc 的动态数组来更改其大小。

提前非常感谢!我已经被这个问题困扰了一段时间,不知道从哪里继续下去。

最佳答案

使用以下算法:

  1. 填充缓冲区。
  2. 检查缓冲区中是否有第一个换行符。
  3. 如果没有换行符,停止,你就完成了。
  4. 分配一个新缓冲区,其大小与您刚刚找到的末尾条目的大小相同。
  5. 将您在第 2 步中找到的末尾条目复制到缓冲区中。
  6. 将缓冲区中剩余的所有字符移至缓冲区的开头。
  7. 转到步骤 1。

这并不是非常有效,但它可以完成工作。

关于c - 将文件的每一行作为字符串存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58071708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com