Amadeus7 Δημοσ. 24 Μαΐου 2009 Δημοσ. 24 Μαΐου 2009 Μπορεί κάποιος να μ πεί πώς μπορώ να δημιουργήσω με malloc έναν πίνακα χαρακτήρων της μορφής title[N][31], όπου Ν δίνεται από το χρήστη. αν στην αρχή ορίσώ *Ν[31] και μετά κάνω malloc για Ν θα μου δημιουργήσει έναν πίνακα N[31][N]. σκεύτηκα αυτό > int N; char *title; title=(char*)malloc(N*sizeof(char)); for(i=0; i<N; i++) title[i]=(char*)malloc(31*sizeof(char)); ή > int N; char **title; title=(char**)malloc(N*sizeof(char*)); for(i=0; i<N; i++) title[i]=(char*)malloc(31*sizeof(char)); ποιό είναι σωστό?
bxenos Δημοσ. 24 Μαΐου 2009 Δημοσ. 24 Μαΐου 2009 το δεύτερο (έχεις πίνακα N δεικτων σε δείκτες 31 χαρακτηρων) η μπορείς να κάνεις και αυτό > char *p = malloc(N * 31); char *str(size_t i,size_t y) { assert(i<N); assert(y<31); return p + (i * 31 + y); }
Amadeus7 Δημοσ. 24 Μαΐου 2009 Μέλος Δημοσ. 24 Μαΐου 2009 άλλη μία απορία, αυτό είναι σωστό? όσο αναφορά την αποθήκευση στους πίνακες, ή πρώτα να αποθηκεύω τις τιμές σε μεταβλητές και μετά στους πίνακες? > for(i=0; i<N_metrhseis; i++) { printf("Doste plhrofories gia th metrhsh pou thelete\n"); fgets(eisagogh, 200 ,stdin); a=atoi(strtok(eisagogh, separator)-1; strcpy(titlos[a],strtok(NULL, separator)); strcpy(channel[a],strtok(NULL, separator)); start[a][1]=atoi(strtok(NULL, separator); start[a][2]=atoi(strtok(NULL, separator); end[a][1]=atoi(strtok(NULL, separator); end[a][1]=atoi(strtok(NULL, separator); length[a][1]=atoi(strtok(NULL, separator); length[a][1]=atoi(strtok(NULL, separator); share[a]=atof(strtok(NULL, separator); }
C6WGMN Δημοσ. 24 Μαΐου 2009 Δημοσ. 24 Μαΐου 2009 > unsigned n; int (*m)[31]; printf("Dwse ari8mo: "); fflush(stdout); if(scanf("%2u", &n) == 1 && m = malloc(sizeof *m * n)) { /* ... */ free(m); }
narbi Δημοσ. 24 Μαΐου 2009 Δημοσ. 24 Μαΐου 2009 Υπάρχουν άλλοι τρόποι για δήλωση δισδιάστατου με malloc στη C εκτός από αυτούς που αναφέρθηκαν παραπάνω?
ippo00 Δημοσ. 25 Μαΐου 2009 Δημοσ. 25 Μαΐου 2009 ναι, πλέον στη c99 μπορείς να δηλώνεις τα arrays με variable size lengths
Dark_Sage Δημοσ. 27 Μαΐου 2009 Δημοσ. 27 Μαΐου 2009 ναι, πλέον στη c99 μπορείς να δηλώνεις τα arrays με variable size lengths δηλαδή πώς?
C6WGMN Δημοσ. 27 Μαΐου 2009 Δημοσ. 27 Μαΐου 2009 > unsigned u; if(scanf("%2u", &u) == 1 && u) char m[u];
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.