|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Mar 2008
Messaggi: 47
|
[C] Problema con programmino
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); } Ultima modifica di Lantis_EM : 26-03-2008 alle 10:48. |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Mar 2008
Messaggi: 47
|
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. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
E ricordati anche cha nella strcpy la stringa di destinazione è il primo parametro, quindi dovresti fare
Codice:
strcpy(inizio->autore,a); strcpy(inizio->titolo,b);
__________________
Il sole è giallo |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Mar 2008
Messaggi: 47
|
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é??? |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
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à: Codice:
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");
}
__________________
Il sole è giallo |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Mar 2008
Messaggi: 47
|
Ti ringrazio, finalmente ho visto dove sbagliavo, posto il codice funzionante. Grazie ancora.
Codice:
#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");
}
Ultima modifica di Lantis_EM : 26-03-2008 alle 19:30. |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Mar 2008
Messaggi: 47
|
Grazie anche a te Antonio.
Farò tesoro delle vostre preziose spiegazioni |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Feb 2002
Città: Modena
Messaggi: 592
|
Lantis_EM per favore modifica la firma perché è contro il regolamento:
http://www.hwupgrade.it/forum/regolamento.php (Punto 1.5 comma b) Grazie
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:05.











(Punto 1.5 comma b)








