gpt4 book ai didi

c - 如何打印字符**

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:42 24 4
gpt4 key购买 nike

我有一个方法可以读取文件并将行分配给 char **。但是当我尝试打印它的第一个元素时,它会打印随机字符。可能有什么问题?

int main()
{
char **lines_from_file = read_from_file(file_name);
print_first_line(lines_from_file);
return 0;
}

void print_first_line(char **command_lines)
{
printf("%s", command_lines[0]);
}

char** read_from_file(char *file_name)
{
int size;
int c;
char *buffer;
char** all_lines= (char**)malloc(sizeof(char*));

FILE *f = fopen(file_name, "r");
if(f)
{
int i=0;
do // read all lines in file
{
size = 0;
buffer = (char *)malloc(size+1);
do // read one line
{
c = fgetc(f);
if(c != EOF) buffer[size++] = (char)c;
buffer = (char*)realloc(buffer, size+1);
}
while(c != EOF && c != '\n');

*(all_lines+i) = (char*)malloc(sizeof(buffer));
**(all_lines+i) = *buffer;
i++;
all_lines = (char**)realloc(all_lines, sizeof(char*) * i);

}
while(c != EOF);
fclose(f);
}
free(buffer);
return all_lines;
}

最佳答案

问题一

线路有问题:

        **(all_lines+i) = *buffer;

这只是从 buffer 中复制了一个字符。因此,all_lines 中的所有字符串都不是空终止的。

你应该替换这些行:

        *(all_lines+i) = (char*)malloc(sizeof(buffer));
**(all_lines+i) = *buffer;

通过

        all_lines[i] = buffer;

问题2

我看到的下一个问题是:

        all_lines = (char**)realloc(all_lines, sizeof(char*) * i);

在循环的第一次迭代中,i 为 1。因此,该行与:

        all_lines = (char**)realloc(all_lines, sizeof(char*));

这不是你想要的。你想要

        all_lines = (char**)realloc(all_lines, sizeof(char*) * 2);

因为您将在下一次迭代中使用 all_lines[1]。该行需要是:

        all_lines = (char**)realloc(all_lines, sizeof(char*) * (i+1));

关于c - 如何打印字符**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40140054/

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