Ниже приведен код, я использую для чтения и значение массива печати Struct - Я получаю сообщение об ошибке при чтении строки:зсап строка - с языком
#include <stdio.h>
#include <stdlib.h>
struct addressbook{
char *fname;
char *lname;
char *num;
char *email;
};
int main() {
struct addressbook addr[100];
int add=0,m=0;
while (m<3)
{
printf("1. Show All Entries\n");
printf("2. Add Entry\n");
printf("3. Quit\n");
scanf("%d",&m);
if (m==1)
{
int i;
for (i=0; i<add;i++)
{
printf("FName: %s , LName: %s , Number: %s , Email: %s \n",&addr[i].fname, &addr[i].lname,&addr[i].num,&addr[i].email);
}
}
else if (m==2)
{
if (add<101)
{
struct addressbook a;
printf("Enter First Name: ");
scanf(" %s", &a.fname);
printf("Enter last Name: ");
scanf(" %s", &a.lname);
printf("Enter Contact Number: ");
scanf(" %s", &a.num);
printf("Enter Email: ");
scanf(" %s", &a.email);
addr[add] = a;
add=add+1;
}
else{printf("100 limit reached");}
}
else if (m=3)
{
m=3;
}
else
{
m=0;
printf("Invalid option");
}
}
}
Это основная программа - но она становится закрыт с неизвестной ошибкой.
Если длина строки вводится в виде всего 3 символов, то ошибки не возникает. Не могли бы вы исправить меня, где я ошибся.
Пробовал ниже код тоже пока не работает
printf("Enter First Name: ");
scanf(" %s", &addr[add].fname);
printf("Enter last Name: ");
scanf(" %s", &addr[add].lname);
printf("Enter Contact Number: ");
scanf(" %s", &addr[add].num);
printf("Enter Email: ");
scanf(" %s", &addr[add].email);
add=add+1;
scanf ("% s", & a.fname); <- 'a.fname' является указателем, поэтому он пытается прочитать строку в указатель? – immibis
Ни одно из ваших структурных полей не будет правильно инициализировано.На самом деле они не инициализируются вообще. Поэтому вы не можете использовать их в 'scanf'. 'scanf' не выделяет вам память. Вам нужно указать правильные буферы для записи. – kaylum
Это неопределенное поведение. Вы не выделяете память для этих указателей. Еще хуже то, что вы на самом деле не пишете в памяти, на которые они указывают, но записывают строки в фактический указатель – paddy