Salve a tutti.
Come da titolo, vorrei sapere la differenza nell'usare le stringhe nelle due forme consentite dal linguaggio C.
Nello specifico, invece, vorrei presentare un problema in cui mi sono appena imbattuto.
Ho scritto del codice totalmente "inutile" (giusto per curiosità e "divertimento"), e vi post il mio problema.
La prima versione, quella problematica, era la seguente:
strtok segnala un accesso illegale alla memoria, dovuto ovviamente da stringa.codice:int main(int argc, char **argv) { char *stringa = "Bla0 Bla1 Bla2 Bla3"; char *temp; temp = strtok(stringa, " "); }
Se invece modifico, utilizzando la seguente versione
funziona tutto bene.codice:int main(int argc, char **argv) { char stringa[128] = "Bla0 Bla1 Bla2 Bla3"; char *temp; temp = strtok(stringa, " "); }
Perchè? Se le due notazioni per indicare una stringa sono equivalenti, ed entrambe sono inizializzate nello stesso modo (e questo vuol dire che anche nel primo caso la memoria per contenere la stringa viene allocata), perchè il primo caso mi dà un accesso illegale in memoria?