gpt4 book ai didi

c - 如何将文件中的单词分配给 C 中的二维字符串数组

转载 作者:行者123 更新时间:2023-11-30 19:40:36 25 4
gpt4 key购买 nike

我正在尝试从文件(每行一个单词)中读取单词并将这些单词存储在二维字符串数组中,以便每一行包含以相同字母/字符开头的所有单词。但是当我尝试打印数组时,所有元素都显示为“null”。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#define numberOfMappers 2

char *buffer1[10];
char *buffer2[10];
int add = 0;
int rem = 0;
int num = 0;

pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t c_mapper = PTHREAD_COND_INITIALIZER;
pthread_cond_t c_pooler = PTHREAD_COND_INITIALIZER;

void *pooler (void *param);
void *mapper (void *param);
void printBuffer1();

int main(int argc, char *argv[]) {
pthread_t tid1;
int i;
if(pthread_create(&tid1, NULL, pooler, NULL) != 0) {
fprintf(stderr, "Unable to create producer thread\n");
exit(1);
}
pthread_join(tid1, NULL);
printBuffer1();
return 0;
}

void *pooler(void *param) {
FILE * fp;
char * line = NULL;
size_t len = 0;
ssize_t read;
fp = fopen("file.txt", "r");
if (fp == NULL)
exit(EXIT_FAILURE);
int i;
for (i = 0; i < 10; i ++) {
buffer1[i] = line;
}
fflush(stdout);
return 0;
}

void printBuffer1() {
int i;
for (i = 0; i < 10; i ++) {
printf("%s\t", buffer1[i]);
}
}

最佳答案

  1. 您忘记调用 getline()
  2. 如果您传递了前一个缓冲区,
  3. getline() 会重用或重新分配行缓冲区,因此旧行会丢失。您可以通过在每次调用之前清除 line 指针来防止这种情况。

所以,插入

    line = NULL, len = 0;
if (getline(&line, &len, fp) < 0) break;

之前

    buffer1[i] = line;

关于c - 如何将文件中的单词分配给 C 中的二维字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35220849/

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