View Full Version : [C] Problema con programmino
Lantis_EM
26-03-2008, 10:34
Buongiorno, ho un problemuccio con questo programma, nel senso che si compila ma quando lo eseguo si crasha, credo che il problema sia legato all'istruzione strcpy. Qualcuno può aiutarmi?
Grazie.
Ininzializzare i tre campi della struttura mediante assegnazione (il campo anno) e usando la funzione strcpy per le due stringhe.
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int main (void)
{
char *a="Dennis Ritchie", *b="Il mio primo programma in C";
struct scheda
{ char *autore;
char *titolo;
int anno;
};
struct scheda *inizio; /*La struttura deve rimanere questa*/
scanf("%d",&(*inizio).anno);
strcpy(*a,(*inizio).autore);
strcpy(*b,(*inizio).titolo);
printf("%s\n%s\n%d\n",(*inizio).autore,(*inizio).titolo,(*inizio).anno);
}
Lantis_EM
26-03-2008, 11:36
Allora per allocare memoria devo utilizzare il comando:
inizio=malloc(sizeof (struct scheda));
è sempre obbligatorio per le strutture?
E come faccio ad inizializzare la struttura, io credevo che così fosse già inizializzata.
yorkeiser
26-03-2008, 14:28
E ricordati anche cha nella strcpy la stringa di destinazione è il primo parametro, quindi dovresti fare
strcpy(inizio->autore,a);
strcpy(inizio->titolo,b);
Lantis_EM
26-03-2008, 17:04
Allora se ho capito bene il codice dovrebbe essere scritto come segue allocando memoria dinamica:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int main (void)
{
char *a="Dennis Ritchie", *b="Il mio primo programma in C";
struct scheda
{ char *autore;
char *titolo;
int anno;
};
struct scheda inizio;
inizio=malloc(sizeof (struct scheda*));
scanf("%d",&(inizio).anno);
(inizio)->autore = (char *) malloc(sizeof(char) *15);
(inizio)->titolo = (char *) malloc(sizeof(char) *25);
strcpy(inizio->autore,a);
strcpy(inizio->titolo,b);
printf("%s\n%s\n%d\n",(inizio).autore,(inizio).titolo,(inizio).anno);
system ("pause");
}
Però mi da lo stesso errore, caspita perché???:muro:
yorkeiser
26-03-2008, 17:18
Hai dichiarato inizio come struttura statica, non come puntatore alla struttura. Inoltre, in fase di allocazione dinamica, gli allochi uno spazio di memoria pari ad un puntatore e non all'effettiva dimensione di un elemento della tua struttura.
Ti posto il tuo codice rivisto, uso la typedef solo per comodità:
int main (void)
{
typedef struct
{
char *autore;
char *titolo;
int anno;
} scheda;
char *a="Dennis Ritchie", *b="Il mio primo programma in C";
scheda* inizio=(scheda*)malloc(sizeof(scheda));
scanf("%d",&inizio->anno);
(inizio)->autore = (char *) malloc(sizeof(char) *15);
(inizio)->titolo = (char *) malloc(sizeof(char) *25);
strcpy(inizio->autore,a);
strcpy(inizio->titolo,b);
printf("%s\n%s\n%d\n",inizio->autore,inizio->titolo,inizio->anno);
system ("pause");
}
Lantis_EM
26-03-2008, 19:17
Ti ringrazio, finalmente ho visto dove sbagliavo, posto il codice funzionante. Grazie ancora.
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int main (void)
{
char *a="Dennis Ritchie", *b="Il mio primo programma in C";
struct scheda
{ char *autore;
char *titolo;
int anno;
};
struct scheda *inizio;
inizio=malloc(sizeof (struct scheda));
scanf("%d",&(*inizio).anno);
(*inizio).autore = (char *) malloc(sizeof(char) *15);
(*inizio).titolo = (char *) malloc(sizeof(char) *25);
strcpy((*inizio).autore,a);
strcpy((*inizio).titolo,b);
printf("%s\n%s\n%d\n",(*inizio).autore,(*inizio).titolo,(*inizio).anno);
system ("pause");
}
Lantis_EM
27-03-2008, 00:03
Grazie anche a te Antonio.
Farò tesoro delle vostre preziose spiegazioni
vegeta83ssj
27-03-2008, 11:42
Lantis_EM per favore modifica la firma perché è contro il regolamento:
http://www.hwupgrade.it/forum/regolamento.php :read: (Punto 1.5 comma b)
Grazie :mano:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.