Alexv ha scritto:
Non volevo mettere zizzania, avevo intenzione....
in effetti io non avevo vissuto molto bene il tuo precedente messaggio, spero tu non ti sia offeso;
nel caso faccio ammenda, non volevo, me ne dispiacerebbe
comunque mi è venuto in mente un caso per il quale la tua domanda avrebbe senso:
se la stringa fosse di lunghezza 1 (il solo terminatore)
fare *(s+1) riferirebbe al primo elemento "dopo" la stringa, in area di memoria non 'giusta'
in effetti ci avevo pensato, scrivendolo, e sapevo che non sarebbe stato un problema, ma poi avevo soprasseduto
mi hai messo la pulce nell'orecchio e quindi ci ho pensato:
non è un problema!
la mia è un'affermazione, non un'ipotesi
formalmente è vero che indirizzo area di memoria fuori da una eventuale stringa corta, ma fin del K&R è formalmente garantito che l'aritmetica dei puntatori si applica anche 'almeno' al primo elemento 'dopo' la fine dell'array, quindi formalmente non ci sono problemi
dato che io 'leggo solo' la posizione di memoria incriminata non ci sarebbero problemi nemmeno in eventuali altre parti del programma
rimane il fatto che leggo comunque un carattere sbagliato
ma delle due l'una:
o il carattere sbagliato è differente da 0 binario, e quindi siccome segue uno zero binario sarebbe una stringa non crescente, return falso
oppure si tratterebbe di uno zero binario, nel caso sarebbe trattato come terminatore che non sarebbe strettamente crescente col terminatore 'vero' della stringa e il tutto comunque finirebbe con un return 0
ieri tutto questo lo sapevo, ma non riuscivo a metterlo a parole, un grazie a te che mi ci hai fatto pensare esplicitamente