scanf стирает значение указателя в структуре (C) - PullRequest
0 голосов
/ 27 мая 2020

мои структуры - это продукт и супермаркет.

продукт:

typedef struct product
{
    char* product_name;
    char* barcode;
} product;

suprmarket:

typedef struct super_market
{
    product** product_list;
    int number_of_products;
} super_market;

мой основной:

super_market new_super;
new_super.number_of_products = 0;
new_super.product_list = (product**)malloc(MAX_NUM_PRODUCTS * sizeof(product));
if (new_super.product_list == NULL)
    printf("couldnt do malloc");

char user_barcode[12] = { 0 };
char *barcode = (char*)malloc(12);
if (barcode == NULL)
    printf("!!couldn't do malloc");;
while(user_barcode!=505){
//exit code is 505
    scanf("%s", user_barcode);
    barcode = user_barcode;
    new_super.product_list[new_super.number_of_products] = add_product(barcode);
    new_super.number_of_products++;
}

add_product делает:

product* new_product = (product*)malloc(sizeof(product));
new_product->product_name = (char*)malloc(20);
if (new_product->product_name == NULL)
    printf("couldn't do malloc");

new_product->barcode = add_barcode;
printf(adding_product_name);
scanf("%s", new_product->product_name);

return new_product;
}

Кажется, что после того, как пользователь ввел второй штрих-код (в строке scanf), значение штрих-кода prod1 удаляется и заменяется вторым штрих-кодом.

Кроме того, я не знаю, имеет ли это значение, но штрих-код и new_super.product_list [new_super.number_of_products] -> штрих-код имеет тот же адрес.

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

...