我正在尝试从文件(每行一个单词)中读取单词并将这些单词存储在二维字符串数组中,以便每一行包含以相同字母/字符开头的所有单词。但是当我尝试打印数组时,所有元素都显示为“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]);
}
}
最佳答案
- 您忘记调用
getline()
。
如果您传递了前一个缓冲区, 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/