Я пытаюсь прочитать только первые 3 символа из файла - с - PullRequest
0 голосов
/ 01 июня 2018

Привет, я создаю приложение, которое будет проверять, все ли числа в файле зафиксированы, а если нет - исправить их (в зависимости от кодов конкретной страны).Чтобы проверить, является ли номер хорошим, мне сначала нужно взглянуть на код страны, и для этого мне нужно прочитать первые 3 символа (с номера телефона в файле), чтобы узнать, есть ли у номера даже код страны.Когда я запускаю приведенный ниже код, я получаю

Стек вокруг переменной 'country_code' был поврежден ".

Я думаю, что мое чтение конкретного 3 символа изСтрока создает проблему, но я не могу найти, что именно делает.

void fix_file_il_country(char *filename)
{
    FILE *f = fopen("1.txt", "r");                  //The file to check from
    if (f == NULL)
    {
        printf("EROR\n");
        return;
    }
    FILE *fp = fopen(filename, "w");                //The new file with fixed numbers
    if (f == NULL)
    {
        printf("EROR\n");
        return;
    }
    char num[20];
    char country_code[3];
    fscanf(f, "%3s %s", &country_code, &num);
    while (!feof(f))
    {
        if (strlen(num) == 12)
            if (country_code == "972")
                fprintf(fp, "%s\n", num);
        fscanf(f, "%3s %s", &country_code, &num);
    }
    fclose(f);
    fclose(fp);
}

Числа, такие как: 9725XXXXXXXX должны быть записаны в новый файл. Номера, такие как: 123XXXXXXXXX, или число с более \ lessсимволы не 12 не должны быть написаны.

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Я вижу две потенциальные проблемы:

  1. массив char должен хранить также нулевое завершение, поэтому он должен быть определен как

    char country_code[4]
    

    в противном случае невозможно определить конец массива.

  2. В scanf вы передаете указатель указателя.Вы должны изменить

    fscanf(f, "%3s %s", &country_code, &num)
    

    на

    fscanf(f, "%3s %s", country_code, num)
    

    без &.

0 голосов
/ 01 июня 2018

Вы не предоставили место для нулевого терминатора.

char country_code[3];

должно быть

char country_code[4];

Также см. Почему это «while (! Feof (file)») »Всегда неправильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...