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

标签 c arrays

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

相关文章:

c - 主 pty 如何检测从 tty 是否已退出?

c - 将字符串分配给动态 int 数组时的重新分配问题

java - 原始数组与 ArrayList

javascript - 如何删除或过滤数组中的特定对象

c++ - 使用 Opencv 模糊矩形中的内容

c - 为什么要在 C 的字符串输入中使用 int 类型的变量?

c - 通用快速排序不起作用

c - C 中的数组声明

c - 如何使用 C 对 TCP 和 UDP 进行基准测试?

javascript - 使用 Array.prototype.reverse() 反转数组的元素