Originariamente inviato da oregon
La funzione sostituisci, cosi' scritta, puo' incorrere in un "pericoloso" buffer overflow, ad esempio, quando il carattere
'p'
si trova all'ultimo o al penultimo posto della stringa ...
Osservazione giustissima!!
Dovrebbe bastare modificare di poco il primo for, quello più esterno:
codice:
for(int i=0; i<d - 2; i++)
Originariamente inviato da cleaner
Originariamente inviato da menphisx
è vietato dallo standard.
In che senso è vietato? Io ho imparato che un array si dichiara in questo modo:
tipo NomeArray[numeroelementi]
ho sbagliato perchè non ho definito la dimensione di d a priori?
Esatto.
codice:
if(a[i] == 'p' || 'e' || 'r') a[i]='x';
E' sbagliatissimo. quello che avresti voluto fare si scrive così:
codice:
if(a[i] == 'p' || a[i] == 'e' || a[i] == 'r') a[i]='x';
Fai attenzione, perché nel modo scritto da te, il compilatore non dà nessun errore poiché sintatticamente è corretto, ma il significato è sbagliato. In quel modo la condizione dell'if è sempre vera perché fai un OR con le codifiche ascii di 'e' e di 'r' che sono sempre diverse da 0 o da NULL.
Originariamente inviato da cleaner
Non sapendo come funzionano i puntatori, il primo parametro della funzione non riesco ancora a capirlo..pensavo si potesse fare anche anche solo tramite array.
Puoi tranquillamente sostituire char *a con char a[], funziona ugualmente.