Я пытаюсь написать функцию, которая читает текстовый файл и помещает все слова этого текста в массив с динамическим размещением, чтобы этот массив не превышал размер.
Мне удалось написать рабочийфункция, которая создает массив с каждым словом (т.е. arr [0] = "bla", arr [1] = "bla", ...), но я не могу вернуть этот массив, поэтому я могу использовать его в своем main ().
char* toArray(char *filename) {
int words = countWords(filename); // this function returns the number of words in the file
char *arr[words];
int cur_size = 0;
int i;
FILE *file;
file = fopen(filename, "r");
for(int i = 0; i < words; i++) {
fscanf(file, "%*s%n", &cur_size);
arr[i] = malloc( (cur_size+1) * sizeof(char));
}
fclose(file);
file = fopen(filename, "r");
for (i = 0; i < words; i++) {
fscanf(file, "%s", arr[i]);
printf("%s\n", arr[i]);
}
fclose(file);
return arr; // not sure if this is how i should return it
}
int main(int argc, char const *argv[]) {
char *arr = toArray("file.txt");
printf("%s", arr[0]);
return 0;
}
Я ожидал, что
printf("%s", arr[0])
напечатает первое слово моего файла.
, но вместо этого я получаю эту ошибку: формат '% s' ожидаетаргумент типа 'char *', но аргумент 2 имеет тип 'int' [-Wformat =] printf ("% s \ n", arr [0]);
Я предполагаю, что допустил ошибку в моемфункция?