Инициализация с несовместимым указателем типа предупреждения - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь создать массив указателей указателей для указания на элемент. до сих пор я выполняю следующий код

#include <stdlib.h>


typedef struct ID{
    char firstName[21];
    char lastName[21];
    char phoneNumber[11];
}ID;

int main(int argc, char *argv[]) {
    int answere,i=0;
    printf("******* WELCOME TO PHONEBOOK **********\n\n\n");
    printf("***************************************\n");
    printf("*                MENU                 *\n");
    printf("*                                     *\n");
    printf("* 1.Add New   2.Print list     3.Exit *\n\n");
    printf("***************************************\n\n");
    ID* ptr=(int*)malloc(21*sizeof(ID));
    do
    {
        printf("Please select (1, 2 or 3): ");
        scanf("%d",&answere);
        if(answere!=1 && answere!=2 && answere!=3)
        {
            printf("//...Error...\\ please give me a correct answere: ");
        }
        if(answere == 1)
        {
            i++;
            addNew(&ptr,i);
        }
        else if(answere==2)
        {
            PrintList(&ptr,i);
        }
    }while(answere!=3); 

    return 0;
}

, поэтому массив ptr будет каждый раз новым пользователем, и я хочу, чтобы он максимально увеличил до 3 пользователей код для добавления нового пользователя:

ID addNew(ID *ptr,int i){
    char fname,lname,phone;
    if(i<3)
    {   
        int l;
        for (l=1;l<=3;l++)
        {
            ID user;
            ptr[l] = user;
            printf("enter the first name:   ");
            scanf("%s",&fname);
            *ptr->firstName= fname;
            printf("enter the last name:    ");
            scanf("%s",&lname);
            *ptr->lastName = lname;
            printf("enter the phone number: "); 
            scanf("%s",&phone);
            *ptr->phoneNumber = phone;
        }
    }
    else
    {
        printf("sorry but you have reach max capacity\n");  
    }
}

проблема в том, что когда я вызываю первый fuction после присвоения значений, программа вылетает. Что не так?

Ответы [ 2 ]

0 голосов
/ 20 января 2020

вы сканируете строку в один символ. что, вероятно, приводит к переполнению памяти, и, следовательно, поведение вашей программы НЕ УКАЗАНО

scanf("%s",&fname); // here fname is only 1 char long, probably a mistake
0 голосов
/ 20 января 2020

Вы используете прототип ID addNew(ID *ptr,int i), поэтому вы должны вызывать его с addNew(ptr,i), не используя &ptr, потому что вы уже объявили ptr как ID*.

Надеюсь, это поможет.

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