从 CSV 文件填充两个数组,每行包含两个用分号分隔的单词

问题描述 投票:0回答:1

如何修复从 CSV 文件填充两个单独数组的代码,其中包含 C 语言中用分号分隔的单词?

我的 CSV 文件看起来像这样:

to meet/encounter;begegnen
to care for/look after;betreuen
superior;vorgesetzt
to borrow/lend/rent;ausleihen

我的功能:

#define LINE_SIZE 100
#define STRING_SIZE 55

char **source_vocab = NULL;
char **target_vocab = NULL;

void allocate_mem(char **dictionary, int n)
{
    for(int i = 0; i < n; i++)
    {
        dictionary[i] = malloc(STRING_SIZE * (sizeof(char)));
        if(dictionary[i] == NULL)
        {
            printf("%sMemory Error. Exiting..", RED);
            return;
        }
    }
}


void populate_arrs(FILE *fptr)
{
    char *line = malloc(LINE_SIZE * sizeof(char));
    int count = 0;

    while(fgets(line, sizeof(line), fptr) != NULL)
    {
        line[strcspn(line, "\n")] = 0;


        char *token = strtok(line, ";");

        token = strtok(line, ";");
        
        if(token != NULL)
            source_vocab[count] = strdup(token);
        token = strtok(NULL, ";");

        if(token != NULL)
            target_vocab[count] = strdup(token);

        count++;
    }
}

它产生的输出不正确:

英语: 见面

德语:ow/借出

英语: encou

德语: leihen

英语: nter

德语:

英语: gegnen

我尝试修改示例 CSV 文件并使用 TXT 文件。这没有帮助。该函数应该完美地将我的单词分成两个数组,例如:

英语: 遇见/相遇

德语: begegnen

c csv strtok
1个回答
0
投票

这里有一个问题:

while(fgets(line, sizeof(line), fptr) != NULL)
                  ^^^^^^^^^^^^

它的意思是“char指针的大小”。它不是它指向的内存大小。

所以请使用

LINE_SIZE
来代替。

© www.soinside.com 2019 - 2024. All rights reserved.