Proprio questo, non so come creare questo array dinamicamente..non sai fare l'allocazione dinamica dell'array di stringhe o cosa?![]()
![]()
Proprio questo, non so come creare questo array dinamicamente..non sai fare l'allocazione dinamica dell'array di stringhe o cosa?![]()
![]()
Originariamente inviato da pop killer
Proprio questo, non so come creare questo array dinamicamente..
codice:#include <stdio.h> #include <stdlib.h> int main() { int num_stringhe = 10; int lungh_stringa = 80; int i; char** strings_array =(char**) malloc(num_stringhe * sizeof(char*)); //metti un cotrollo d'errore su strings_array == null for(i = 0; i< num_stringhe ; i++) { strings_array[i] = (char*)malloc(lungh_stringa * sizeof(char)); //metti un cotrollo d'errore su strings_array[i] == null } // libera la memoria con free ed un processo simmetrico (prima il for e poi free(strings_array)) return 0; }
Il centro dell'attenzione non è sempre un buon posto in cui trovarsi
Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)
Grazie mille, ma dovresti spiegarmi una cosa, a che serve questa cosa?Originariamente inviato da unomichisiada
codice:#include <stdio.h> #include <stdlib.h> int main() { int num_stringhe = 10; int lungh_stringa = 80; int i; char** strings_array =(char**) malloc(num_stringhe * sizeof(char*)); //metti un cotrollo d'errore su strings_array == null for(i = 0; i< num_stringhe ; i++) { strings_array[i] = (char*)malloc(lungh_stringa * sizeof(char)); //metti un cotrollo d'errore su strings_array[i] == null } // libera la memoria con free ed un processo simmetrico (prima il for e poi free(strings_array)) return 0; }
es.
(int *)malloc(num * sizeof(int);
Ho capito tutto tranne a cosa servono questo fo**utissimo (int *)
Scusami una cosa, se faccio
for(i = 0; i < elem; i++)
{
printf("Valore array[%i] (max %i char): ", i, str);
scanf("%s", &array[i]);
}
da errore, se faccio
for(i = 0; i < elem; i++)
{
printf("Valore array[%i] (max %i char): ", i, str);
scanf("%s", array[i]);
}
vs bene, come mai?
scusate l'intromissione....se la stringa che acquisisco ha più caratteri della dimensione dell'array...come si può fare.
cioè dichiaro char string[80]
e poi con scanf acquisisco string ma ha più di 80 caratteri.
da errore? e come si può ovviare
la dimensione dell'array si puo dare dopo aver contato i caratteri della stringa acquisiti con la scanf?
Non saro' esperto ma posso risponderti:Originariamente inviato da woss
scusate l'intromissione....se la stringa che acquisisco ha più caratteri della dimensione dell'array...come si può fare.
cioè dichiaro char string[80]
e poi con scanf acquisisco string ma ha più di 80 caratteri.
da errore? e come si può ovviare
la dimensione dell'array si puo dare dopo aver contato i caratteri della stringa acquisiti con la scanf?
1) Da errore, si puo' ovviare con l'allocazione dinamica, puoi mettere un array molto grande e poi liberare la memoria vuota con free;
2) Non si puo', appatto che non crei una variabile temporanea, ma deve essere limitata anch'essa, quindi e' inutile.
Per la prima domanda il (int *) è un cast (cioè una conversione esplicita di tipo) da puntatore a void a puntatore ad inteo.Questo perchè la malloc non sapendo a priori che tipo di array ci allocherai ti restituisce un puntatore a void* (un puntatore di tipo generico diciamo) che per essere utilizzato deve essere convertito.Ora non tutti i compilatori ti danno errore se non lo metti, però dovrebbero e quindi mettilo comunque.Originariamente inviato da pop killer
Grazie mille, ma dovresti spiegarmi una cosa, a che serve questa cosa?
es.
(int *)malloc(num * sizeof(int);
Ho capito tutto tranne a cosa servono questo fo**utissimo (int *)
Scusami una cosa, se faccio
for(i = 0; i < elem; i++)
{
printf("Valore array[%i] (max %i char): ", i, str);
scanf("%s", &array[i]);
}
da errore, se faccio
for(i = 0; i < elem; i++)
{
printf("Valore array[%i] (max %i char): ", i, str);
scanf("%s", array[i]);
}
vs bene, come mai?
Per la seconda domanda, la & non ci vuole nel caso acquisisa una stringa perchè la scanf ha bisogno del puntatore all'aria di memoria allocata per i dati da acquisire,siccome il nome di un array di caratteri è già un puntatore non hai bisogno di ottenere l'indirizzo di quel puntatore, va giàbene così.
Il centro dell'attenzione non è sempre un buon posto in cui trovarsi
Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)
Di fatto è cosìOriginariamente inviato da pop killer
Non saro' esperto ma posso risponderti:
1) Da errore, si puo' ovviare con l'allocazione dinamica, puoi mettere un array molto grande e poi liberare la memoria vuota con free;
2) Non si puo', appatto che non crei una variabile temporanea, ma deve essere limitata anch'essa, quindi e' inutile.
Il centro dell'attenzione non è sempre un buon posto in cui trovarsi
Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)
a questo punto come faccio a controllare l'errore, cioè se compare l'errore come posso rimediare senza compromettere la continuità del programma...
es:
se la stringa acquisita è più di 80 caratteri
stamapare a video impossibile acquisire la stringa
e richiedere di inserire un'ulteriore stringa
Scusa, ma se tu allochi un buffer di 2000 caratteri che poi liberi, pensi che l'utente possa usarli tutti da tastiera?
certo che no...![]()