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.Originariamente inviato da Celebron
al mio parere al posto di
dovresti farecodice:struct.solutions[x] = "stringa";
se non sbaglio, ma non ricordo bene, printf %s da problemi se la stringa che deve stampare non ha appunto un terminatore di stringa.codice:strcpy(struct.solutions[x], "stringa\0");
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.
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.codice:/*se so quali sono le stringhe*/ struct.solutions = (char**)malloc(n*sizeof(char*)); struct.solutions[x] = "stringa";
Consiglio di usare sempre il secondo metodo allocando n char e copiando la stringa con strcpy