Привет, мне было интересно, может ли кто-нибудь помочь мне, это мой первый вопрос, задающий вопрос здесь, поэтому я сожалею, если не включил достаточную информацию. У меня есть задание, где у нас есть файл с более чем 50000 словами 1 в строке. Я пытаюсь скопировать его в двойной массив, а позже я мог бы называть буквы для слова, например, слово «рыба» быть на М [1] [] = "рыба" -> M [1] [2] = якопирование содержимого файла в двойной массив
#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);
здесь лежит моя проблема, которую я пытаюсь скопировать содержимое текстового файла на М [] [], но это ничего
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 и я попытался исследовать, но я не понял ошибки у меня были с этими методами, не копировать, кто-то пожалуйста, помогите мне.
'fgetc()' нуждается в 'rewind()', чтобы вернуться к чтению файла с начала снова – Gopi
Согласитесь с вышеуказанным комментарием 'rewind'. В дополнение к исправлению этого, вы можете изменить свои 'fgets', чтобы скопировать прямо в массив' M', а не в первый промежуточный массив 'line'. Просто обязательно удалите '\ n', что' fgets' помещает в конец данных. Но если вы хотите скопировать его байтом по байту, как это делается в настоящий момент, вам нужно исправить тот факт, что копия не завершает целевой буфер с '\ 0', который необходим для строк. – kaylum