您好,我想知道是否有人可以帮助我,这是我第一次在这里发帖提问,所以如果我没有提供足够的信息,我很抱歉。我有一个任务,我们有一个文件,每行超过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的事情,而且我已经尝试过研究,但我并不了解我对这些方法所犯的错误,有人请帮帮我。
答案 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/返回值。