Как исправить ошибку fscanf, сказав, что мой массив отличается от того, что я объявил? - PullRequest
0 голосов
/ 05 февраля 2019

Я выделяю память для массива.Данные поступают из 3 разных текстовых файлов, которые я объединяю и размечаю.Когда я пытаюсь найти fscanf из файлов, я получаю сообщение о том, что мой массив имеет тип int, когда я определенно.объявлен тип char

Я пытался найти и исправить вещи, но это не помогло.Я попытался выполнить перемотку (), потому что подумал, что, возможно, индикатор положения находится в конце файла.Размер массива - это количество строк в файлах .txt.Файлы .txt содержат только слово в строке.Я убрал функцию подсчета строк, чтобы очистить неважный код.

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


int addOn(FILE *file, int size);
char **array;
int height=0;
int count2 = 0;

int main()
{  
    FILE *file0;
    FILE *file1;
    FILE *file2;

    int i;
    int sz0, sz1, sz2;
    int totalsz;


    //open files
    file0 = fopen("american0.txt", "r");
    file1 = fopen("american1.txt", "r");
    file2 = fopen("american2.txt", "r");

    //getting size of the files
    sz0 = countLines(file0);
    sz1 = countLines(file1);
    sz2 = countLines(file2);
    totalsz = sz0+sz1+sz2;
    printf("%d", sz0);

    //initializing array
    array = (char **)calloc(totalsz, sizeof(char *));
    for(i = 0; i < totalsz; i++)
    {
        array[i] = (char *)calloc(50, sizeof(**array));
    }

    addOn(file0, sz0);
    addOn(file1, sz1);
    addOn(file2, sz2);

    fclose(file0);
    fclose(file1);
    fclose(file2);

    for(i = 0; i <totalsz; i++)
    {
        free(array[i]);
    }
    free(array);        
    return 0;

}
int addOn(FILE *file, int size)
{
    char str[50];
    for(int height = 0; height < size; height++)
    {
        for(int width = 0; width < 50; width++)
        {
            fscanf(file, "%s", array[count2][width]);
            printf("%s", array[count2][width]);
            count2++;
        }
    }
}

Я ожидаю, что каждое слово будет распечатано после помещения его в массив, но я получаю только эту ошибку:

warning: format ‘%s’ expects argument of type ‘char *’, but argument 3      has type ‘int’ [-Wformat=]
             fscanf(file, "%s", array[count2][width]);
                          ^
warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
             printf("%s", array[count2][width]);

1 Ответ

0 голосов
/ 05 февраля 2019

Я только что понял это после того, как отправил это.Конечно.когда я пытаюсь поместить слово в массив в addOn (), я обращаюсь к каждому символу, а не позволяю fscanf делать это.

Должно быть:

fscanf(file, "%s", array[count2];
printf("%s", array[count2]);

Прямо сейчас, еслиВы смотрите на это, это работает только для первого запущенного addOn, потому что я не настроил то, что я посылаю в addOn во 2-й и 3-й раз, когда он запускается, что должно быть быстрым решением.

...