将文件中的单词分配给C中的数组

时间:2017-02-15 20:06:45

标签: c arrays

我希望程序从输入文件input.txt中读取,识别每个单词,并将每个单词保存为数组中的字符串,名为A.

我试过跟随其他建议无济于事,我当前的代码可以打印出数组中的每个单词,但似乎将单词保存到数组中的每个项目,而不只是一个。

非常感谢任何帮助。

示例输入文件:

Well this is a nice day.

当前输出:

Well
this
is
a
nice
day.
This output should be the first word, not the last: day.

我的代码:

#include <stdio.h>

const char * readInputFile(char inputUrl[]) {
    char inputLine[200];
    char inputBuffer[200];
    const char * A[1000];
    int i = 0;

    FILE *file = fopen(inputUrl, "r");
    if(!file) {
        printf("Error: cannot open input file.");
        return NULL;
    }

    while(!feof(file)) {
        fscanf(file,"%[^ \n\t\r]",inputLine); // Get input text
        A[i] = inputLine;
        fscanf(file,"%[ \n\t\r]",inputBuffer); // Remove any white space
        printf("%s\n", A[i]);
        i++;
    }
    printf("This output should be the first word, not the last: %s\n", A[0]);
    fclose(file);

}

int main() {
    readInputFile("input.txt");


    return(0);
}

1 个答案:

答案 0 :(得分:0)

您复制到数组的每个元素的实际上是inputLine指向的字符串的地址。循环的每次迭代都会更改指向的字符串,并且所有数组元素都指向相同的字符串。

您需要通过分配内存空间来保存它(malloc)然后将其逐字复制到新位置(strcpy)来创建字符串的副本...

[edit]您可能还想在复制之前从字符串中删除空格;)[/ edit]

#include <stdlib.h>                                                                                                                                                                 
#include <stdio.h>
#include <string.h>

const char * readInputFile(char inputUrl[]) {
    char inputLine[200];
    char inputBuffer[200];
    char * A[1000];
    int i = 0;

    FILE *file = fopen(inputUrl, "r");
    if(!file) {
        printf("Error: cannot open input file.");
        return NULL;
    }

    while(!feof(file)) {
        fscanf(file,"%[^ \n\t\r]",inputLine); // Get input text
        A[i] = malloc(strlen(inputLine)+1);
        strcpy(A[i], inputLine);
        fscanf(file,"%[ \n\t\r]",inputBuffer); // Remove any white space
        printf("%s\n", A[i]);
        i++;
    }   
    printf("This output should be the first word, not the last: %s\n", A[0]    );
    fclose(file);

}

int main() {
    readInputFile("input.txt");

    return(0);
}