Originariamente inviato da Celebron
al mio parere al posto di
codice:
struct.solutions[x] = "stringa";
dovresti fare
codice:
strcpy(struct.solutions[x], "stringa\0");
se non sbaglio, ma non ricordo bene, printf %s da problemi se la stringa che deve stampare non ha appunto un terminatore di stringa.
Hai ragione su strcpy: assegnando con l'operatore =, assegni l'indirizzo di "stringa" all'indirizzo di stringa, il che non dovrebbe essere un problema, ma lo diventerebbe nel caso in cui provi a modificare quella stringa, in quanto non è modificabile.
Una stringa const come "stringa" il compilatore automaticamente gli aggiunge il terminatore alla fine quindi non è un problema per printf: il problema semmai potrebbe essere un eventuale spazio, che printf considera come terminatore.
codice:
/*se so quali sono le stringhe*/
struct.solutions = (char**)malloc(n*sizeof(char*));
struct.solutions[x] = "stringa";
Attento in questo modo la stringa avrà dimensione max di "stringa"+1 caratteri e dipendentemente dal compilatore, può essere un errore modificare quell'area di memoria.
Consiglio di usare sempre il secondo metodo allocando n char e copiando la stringa con strcpy