Этот код компилируется с помощью Codeblocks в Windows, а когда я нажимаю 1 для запуска функции «Aggiungi» (Insert), я могу вставить только имя, фамилию и когда я нажимаю Enter после фамилии (поэтому, когда я должен вставить Tel), он сработает.C Структура с типом указателя символов не может вставить значение в функцию
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
typedef struct rubrica
{
char *nome;
char *cognome;
char *tel;
} rubrica;
void aggiungi(rubrica *contatto, int ncont);
int main(void)
{
rubrica *contatto[MAX];
int act, ncont=0;
do
{
printf("1)AGGIUNGI\n");
printf("2)VISUALIZZA\n");
printf("0)ESCI\n");
scanf("%d", &act);
if(act==1)
{
aggiungi(*contatto, ncont);
ncont++;
}
} while (act!=0);
return 0;
}
void aggiungi(rubrica *contatto, int ncont)
{
printf("\n________________\n");
contatto[ncont].nome=malloc(21*sizeof(char*));
printf("\nNome: ");
scanf("%s", contatto[ncont].nome);
contatto[ncont].cognome=malloc(21*sizeof(char*));
printf("\nCognome: ");
scanf("%s", contatto[ncont].cognome);
contatto[ncont].tel=malloc(12*sizeof(char*));
printf("\nTelefono: ");
scanf("%s", contatto[ncont].tel);
}
Добро пожаловать в Stack Overflow! Похоже, вам, возможно, потребуется научиться использовать отладчик для выполнения вашего кода. С хорошим отладчиком вы можете выполнить свою программу по очереди и посмотреть, где она отклоняется от ожидаемого. Это важный инструмент, если вы собираетесь заниматься программированием. Дальнейшее чтение: [Как отлаживать небольшие программы] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –
'categorya * contatto [MAX];' -> 'categorya contatto [MAX];', Затем 'aggiungi (* contatto, ncont);' -> 'aggiungi (contatto, ncont);' – BLUEPIXY
Major: 'categorya * contatto [MAX]; 'не имеет памяти, выделенной ни одному из его элементов указателя. Minor: 'malloc (21 * sizeof (char *))' должно быть 'malloc (21 * sizeof (char))'. –