如何在C中从文本文件到数组获取字符串

时间:2015-10-10 17:38:30

标签: c arrays

我正在尝试从文本文件中读取一个字符串列表并将其放入一个包含n个单词的数组中。如果不是所有文本行我只需要前两个,我会创建大小为2的数组设置n = 2.但是,当我将单词数作为参数传递时,如果n不等于列表中的单词数,则会收到分段错误,整个列表仍将打印。如何在跟踪列表中的下一个字符串时控制数组将保留多少个单词?

我的文本文件如下所示: AH12M8 N \ n AD34FU O \ n APD83H O \ n LKFU29 N \ n

list

2 个答案:

答案 0 :(得分:0)

 while(fscanf(myfile,"%[^\n]%*c",arr[i])==1)    
    {
        arr[i][strlen(arr[i])-1] = '\0';
        i++;
    }

在使用argc之前检查argv[1]的值。

答案 1 :(得分:0)

一个问题是你只为n字符串分配空间,但是你读取了整个文件 - 所以如果有超过n行的话,你会跑掉数组的末尾并且腐败的记忆和可能的崩溃。另一个问题是你给了fgets ENTIRE数组的长度,而不是单个字符串的长度,所以如果任何行长度超过99个字符,你会跑到下一行(或者结束)和崩溃)。解决这两个问题相对容易:

    char arr[n][100];
    int i = 0;
    while(i < n && fgets(arr[i], sizeof(arr[i]), myfile) != NULL)
    {
        if (arr[i][strlen(arr[i])-1) == '\n')
            arr[i][strlen(arr[i])-1] = '\0';
        i++;
    }

我还将其更改为仅删除最后一个字符(如果它是换行符) - 如果您有任何超过99个字符的输入行,它们将被拆分为多行。