将文件的内容复制到双数组

时间:2015-11-27 05:09:46

标签: c file scanf gets

您好,我想知道是否有人可以帮助我,这是我第一次在这里发帖提问,所以如果我没有提供足够的信息,我很抱歉。我有一个任务,我们有一个文件,每行超过50000个单词我尝试将其复制到一个双数组,然后我可以调用单词的字母,例如单词"鱼"会在M [1] [] ="鱼" - > M [1] [2] = i

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

int main(int argc, const char * argv[]) {
 FILE *file;
 file= fopen("/desktop/textfile.txt", "rwx");
 int words=0;
  while ((ch = fgetc(file)) != EOF) {//using this to find number of words
    if (ch == '\n'){
        words++;
    }
}
char **M = (char **)malloc(sizeof(char *)*words);
for(int i=0; i < words; i++)
    M[i] = (char *)malloc(sizeof(char)*50);

这就是我的问题我试图将文本文件的内容复制到M [] []但它没有复制任何东西

int a=0;
 while ((fgets(line,50, file)) != EOF){
    for(int i=0;i<strlen(line)-1;i++)
    text[a][i] = line[i];
    a++;}

我已经尝试过其他类似strcopy的事情,而且我已经尝试过研究,但我并不了解我对这些方法所犯的错误,有人请帮帮我。

1 个答案:

答案 0 :(得分:0)

你的代码在算法方面很好,另一方面是语法。

所以这是你的主要重新排序

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

using namespace std;

int main(int argc, const char * argv[]) {

 int words = 50000; // you need to define words and initialize it correctly

 // We initialize M before processing the file
 char **M = (char **) malloc(sizeof(char *) * words);
 for(int i=0; i < words; i++)
     M[i] = (char *) malloc( sizeof(char) * 50 );

 FILE *file;
 file= fopen("./desktop/textfile.txt", "r"); // You're only reading so just r
  int a=0;
  while ((fgets(line,50, file)) != NULL && a < words) { // a<words means we don't want to overflow the buffer M
      for(int i=0;i<strlen(line)+1;i++) // strlen returns the length of the string WITHOUT
          M[a][i] = line[i];            // the terminating character (that you want), so +1
                                    // I also replaced text by M since it's the actual array
      }
      a++;   // a++ inside the while not the for, you want to go forth only on a new word.
  }

  /* From here on you can use M the way you want */
}

从这里开始这应该有用,如果你还有问题,请不要犹豫,但要注意你变量的声明顺序。理想情况下,您还要检查文件是否已正确打开,但您可以稍后集中精力。

编辑:您还需要检查fgets s是否为NULL而不是EOF,请参阅:http://www.cplusplus.com/reference/cstdio/fgets/返回值。