C fscanf意外地从下一行中提取内容

时间:2015-06-26 17:44:34

标签: c scanf

编辑:好的我发现了这个令人尴尬的错误。我的描述数组对于该行来说还不够大......

我试图从简单格式化的文本文件中提取相关的缩写和描述,但我只在一行上遇到问题,而其他每一行都正常工作。

在我读取的文本文件中,第5-7行是:

5. FW Foreign word
6. IN Preposition or subordinating conjunction
7. JJ Adjective

我尝试对每一行做的是读取缩写并将其存储为字符数组,然后对描述执行相同的操作。对于除#6之外的每一行,它都可以正常工作。

我的期望是:

print decription[line6]   => "Preposition or subordinating conjunction"

但我得到的是:

print decription[line6]   => "Preposition or subordinating conjunctio"Adjective"

我很遗憾为什么会这样做。它似乎是从下一行读取数据。或许我最终覆盖了该阵列的下一行。

#include <stdio.h>

int main(){
    FILE *fileToRead = fopen("PennTreebank_POS_Tags.txt", "r");
    FILE *fileToWrite = fopen("newFile.txt", "w");

    int i, j;
    i = j = 0;
    int nextChar;

    char abbreviation[50][5];
    char description[50][40];

    while( fscanf(fileToRead, "%*s %s ", abbreviation[i]) != EOF ){

        description[i][0] = '"';
        while( ((nextChar = fgetc(fileToRead)) != '\n') && (nextChar != EOF) ){
            description[i][j] = nextChar;
            j++;
        }
        description[i][j] = '"';
        description[i][j+1] = '\0';

        j=1;
        i++;
    }

    for( i=0; i<36; i++ ){
        printf("%s %s\n", abbreviation[i], description[i]);
    }
}

1 个答案:

答案 0 :(得分:3)

文字&#34;介词或从属连词&#34;长度为40个字符。

所以数组

char description[50][40];

的大小不足以保持长度为40 0终止符。