gpt4 book ai didi

C - 打印 char * 数组

转载 作者:行者123 更新时间:2023-11-30 16:41:00 24 4
gpt4 key购买 nike

我试图读取数千个单词并仅打印前 15 个单词,但它打印的唯一单词是我存储单词的数组中的最后一个单词。

g++ --版本g++(Ubuntu/Linaro 4.6.3-1ubuntu5)4.6.3

从下面的答案中我导出了下面的代码来逐行读取文件 C read file line by line

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

unsigned char *words[25143];

int readDictionary(void)
{
FILE * fp;
char * line = NULL;
size_t len = 0;
ssize_t read;
int count = 0;


fp = fopen("dictionary.txt", "r");
if (fp == NULL)
{
printf("failed to open file");
exit(EXIT_FAILURE);
}
while ((read = getline(&line, &len, fp)) != -1) {
printf("%s", line);
words[count] =(unsigned char*) line;
count++;
}

fclose(fp);
if (line)
free(line);

}

int main (void)
{

readDictionary();
printf("we just read the dictionary\n");
for (int k= 0; k <15; k++)
{
printf("%d %s",k,(unsigned char*)words[k]);
}
}

最佳答案

查看getline的描述,这表明它只会在传递的行为 NULL 时分配缓冲区。它只会在第一次时为 NULL,因此将重用缓冲区或在行不适合时增加缓冲区。

如果您希望它为每个单词分配单独的缓冲区,请执行

printf("%s", line);
words[count] =(unsigned char*) line;
line = NULL;
count++;

并删除

if (line)
free(line);

但不要忘记稍后在某个地方释放所有非 NULL 单词条目。

关于C - 打印 char * 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46438180/

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