У меня ошибка сегментации при сканировании (% s, lastName);(код тела внутри) - PullRequest
0 голосов
/ 28 октября 2011

РЕДАКТИРОВАТЬ: собирается попробовать правильно использовать мои символы ... [не работает = (]

РЕДАКТИРОВАТЬ: РЕШЕНО (я не могу ответить на свой вопрос еще 7 часов ...)

Спасибо за комментарий, Брайан, это просто константа, объявленная сверху ... (это = 20).

Оказывается, ошибка произошла, потому что я забыл добавить следующую строку после ввода имени ввода.

сейчас работает = D

: ENDEDIT (смеется)

Я кодирую свой код ниже, в основном я ввел имя, которое должно найти

John

Тогда я введу фамилию ...

Локк

и как только я вхожу в "Локк", появляется эта ошибка, я чувствую, что это может быть scanf, и мне следует использовать лучшую альтернативу ???

int findPatron(struct Library *lib,struct Patron **p)
{
    int i;
    char firstName[NAME_LENGTH], lastName[NAME_LENGTH];
    printf("\nPlease enter the patron's first name: ");
    scanf("%s",firstName);
    printf("\nPlease enter the patron's last name:  "); //this line prints...
    scanf("%s",lastName);  //SEGMENTATION ERROR happens here I'm pretty sure.
    printf("deerrrr");  //this line never prints
     for(i = 0; i<lib->totalPatrons;i++)
    {
            printf("checking %s %s to %s %s",lib->patrons[i].name.first,lib->patrons[i].name.last,firstName,lastName);
            if((strcmp(lib->patrons[i].name.first, firstName) == 0) && (strcmp(lib->patrons[i].name.last, lastName) == 0))
            {
                    **p = lib->patrons[i];
                    return 0;
                    break;
            }
    }

    return 1;  //No Match!
}

Ответы [ 2 ]

0 голосов
/ 28 октября 2011

ОШИБКА СЕГМЕНТАЦИИ происходит здесь, я уверен эта строка никогда не печатается

printf C буферизуется и сбрасывается только явным вызовом fflush или блокирующим действием (например, scanf, который AFAIK также сбрасывает в стандартный вывод), поэтому ошибка может произойти в другом месте Научитесь использовать отладчик, это правильный способ отладки программ на Си.

0 голосов
/ 28 октября 2011

Вы получаете ошибку сегментации после ваших scanf() утверждений.

Если вы удалите все после printf("deerrrr"); и добавите \n к этому выводу, чтобы буфер был очищен, вы обнаружите, что все это работает просто отлично (при условии, что NAME_LENGTH по крайней мере 6 в вашем примере вход).

Часть программирования знает, как изолировать и отладить ваши проблемы.

Ваши проблемы связаны с вашим циклом и lib struct - вы разыменовываете то, что не должно быть.

...