This is my code.... I have some problem with pointers, scanf_s and struct Persona.
ERRORS in line 51, 53, 59 --- > C6011 , C6064, C6067.
I don't know how to resolve it... I must put Name and Surname into lista_nomi and i don't know if the method of putting data that i use, is the right one!
Please HELP ME , i'm a begginer on programming in C language.
#include <stdio.h>
#include <stdlib.h>
/*
Sia dato un insieme di nomi e cognomi di persone. Si scriva un programma in linguaggio
C che raggruppi le persone con ugual cognome, stampando di seguito tutti i nomi delle
persone che hanno lo stesso cognome.
I nomi ed i cognomi devono essere letti da tastiera, come nell’esempio, finché non viene
letto il nome FINE LISTA. L’ordine con cui si stampano i nomi ed i cognomi non è importante.
*/
#define MAX_PEOPLE 100
struct persona
{
char* nome[30];
char* cognome[30];
};
typedef struct persona Persona;
int main(void)
{
int i;
do
{
printf("Inserisci numero di persone da registrare!\n->");
scanf_s("%d", &i);
if (i <= 0 || i > MAX_PEOPLE)
{
printf("Numero inserito non valido.\nRANGE -> [1 to %d]", MAX_PEOPLE);
}
} while (i <= 0 || i > MAX_PEOPLE);
Persona * lista_nomi = (Persona *) malloc(i * sizeof(Persona));
if (lista_nomi == NULL)
{
printf("Errore nell' inizializzazione dell'array lista_nome");
}
// Inserimento dei nomi e cognomi
for (int e = 0; e < i; e )
{
printf("\nInserisci %d persona\n", e 1);
printf("\tInserisci Nome -> ");
scanf_s("%s", &lista_nomi[e].nome);
printf("\tInserisci Cognome -> ");
scanf_s("%s", &lista_nomi[e].cognome);
}
for (int j = 0; j < i; j )
{
printf("Elemento %d -> %s %s", j, lista_nomi[j].nome, lista_nomi[j].cognome);
}
free(lista_nomi);
return 0;
}
CodePudding user response:
You need to supply one more argument that specifies the size pf the character arrays. Also remove the address of operator. For example
printf("\tInserisci Nome -> ");
scanf_s("%s", lista_nomi[e].nome, ( rsize_t )30 );
printf("\tInserisci Cognome -> ");
scanf_s("%s", lista_nomi[e].cognome, ( rsize_t )30);
Also you should add the new line character '\n'
in this call of prontf
printf("Elemento %d -> %s %s\n", j, lista_nomi[j].nome, lista_nomi[j].cognome);
Pay attention to that your program continue to work even when memory for the array was not allocated.
if (lista_nomi == NULL)
{
printf("Errore nell' inizializzazione dell'array lista_nome");
}
that can results in undefined behavior.