gpt4 book ai didi

c - 我的问题是关于 get_next_line 函数,我应该读取一个文件并使用多个缓冲区大小

转载 作者:太空宇宙 更新时间:2023-11-03 23:37:10 24 4
gpt4 key购买 nike

我的函数是一个字符一个字符地读取,所以它不能使用多个缓冲区大小,我需要帮助来修复它,以便它可以使用任何缓冲区大小,而不仅仅是 1。

所以主要问题是它应该使用缓冲区大小而不是逐个字符

我试图读取更改缓冲区,但它会跳过一些字符

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#define BUFF_SIZE 32
#include <string.h>
#include <ctype.h>
#include <stdbool.h>

int get_next_line(int fd, char **line){

static char * s_line = NULL;
static int s_max = 0;
char character[BUFF_SIZE + 1];

if(s_line == NULL)
{
s_line = (char *)malloc((BUFF_SIZE + 1) * sizeof(char));
s_max = BUFF_SIZE;
}
int len = 0;
int ret;

while ((ret = read(fd, character, BUFF_SIZE)) > 0)
{
if (character[0] == '\n'){
break;
}
s_line[len] = character[0];
len = len + 1;
if (len >= s_max)
{
char *tmp;
s_max = s_max + BUFF_SIZE;
tmp = (char *) malloc((s_max + 1) * sizeof(char));
s_line[len] = '\0';
strcpy(tmp, s_line);
free(s_line);
s_line = tmp;
}
}
if (ret < 0) { //read error, free memory and return -1
free(s_line);
return -1;
}
if (len == 0){
free(s_line); //required to release the memory after reading the entire file
s_line = NULL;
return 0;
}
s_line[len] = '\0';
*line = s_line;
return 1;
}
int main(int argc, char **argv)
{
char *txt;
int fd;

fd = open(argv[1], O_RDONLY);
while (get_next_line(fd, &txt) > 0)
{
printf("%s\n", txt);
}
printf("Done\n");
if (txt != NULL)
{
free(txt);
}
return (0);
}

l 期望读取整个文件的输出,而不是跳过字符 喜欢它在做什么

最佳答案

字符读取大小为 BUFF_SIZE 的字符串。因此,如果 BUFF_SIZE > 1,您需要遍历字符串中的每个元素,并且必须将其复制到 s_line 数组中以复制完整的字符串。否则字符将被跳过。

while ((ret = read(fd, character, BUFF_SIZE)) > 0)
{
for(i=0;i<BUFF_SIZE;i++){ // for loop is added to visit every element of the character array
if (character[i] == '\n'){
s_line[len] = '\n';
break;
}
s_line[len] = character[i];
len = len + 1;
if (len >= s_max)
{
char *tmp;
s_max = s_max + BUFF_SIZE;
tmp = (char *) malloc((s_max + 1) * sizeof(char));
s_line[len] = '\0';
strcpy(tmp, s_line);
free(s_line);
s_line = tmp;
}
}}

关于c - 我的问题是关于 get_next_line 函数,我应该读取一个文件并使用多个缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56934840/

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