Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
Ho risolto quel problema alla fine, però adesso ne ho un altro
ahahahahahah
allora: tu mi avevi detto che facendo così:
Codice sorgente - presumibilmente Plain Text |
strcpy(vettore_temporaneo_due,strchr(fnp,'\0')-1);
|
riuscivo a copiare l'ultimo carattere, e la cosa funziona alla grande,e ti ringrazio anche;
il mio problema è che il numero di caratteri che devo copiare non è fisso, ma variabile; spiego meglio: io devo sostitui il carattere 'z' OVUNQUE ESSO SIA. Allora avevo pensato di modificare la tua istruzione così:
Codice sorgente - presumibilmente Plain Text |
strcpy(vettore_temporaneo_due,strchr(fnp,'\0')-(strlen(fnp)-i));
|
in modo che mi copiava gli ultimi tot caratteri che compaiono dopo la 'z'.
Però non mi funziona, e me ne sono accorto perchè per vedere se funzionava mi andavo a stampare il vettore temporaneo in cui li mettevo, ma me lo da vuoto.
Come potrei risolvere il problemino ? |
|
dmr (Normal User)
Pro
Messaggi: 141
Iscritto: 04/01/2012
|
Ciao ho scritto la funzione in molta fretta quindi non credo assolutamente che sia efficiente, comunque funziona.
Funziona per questo tipo di stringa: exoyezP(z,y,x)
Codice sorgente - presumibilmente C# |
char *funzione(char *str) { char *tmp=malloc(20);// primo array dove copio tutti i caratteri dopo z char *tmp2=malloc(20);// array con la stringa modificata char *ptr=tmp2;// puntatore a tmp2 perchè il puntatore tmp2 viene modificato int flag=0;// flag in modo da fermarsi alla seconda z strcpy(tmp,"f(y)");// copio su tmp f(y) strcat(tmp,strrchr(str,'z')+1);// copio su tmp tutti i caratteri dopo z for(;*str!='\0';str++) { if(*str=='z') { flag++; } if(flag==2)break; *tmp2++=*str;// copio tutte le cose prima di z } strcat(tmp2,tmp);// concatenamento finale free(tmp); return ptr; }
|
Come ti ho gia scritto l'ho fatta con molta fretta ma una volta che hai capito il meccanismo la puoi modificare per farla molto piu efficiente.
Ultima modifica effettuata da dmr il 10/08/2012 alle 21:55 |
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
Per caso è possibile riuscire a farlo senza usare l'istruzione break ?
Perchè quello che sto cercando di fare è un progetto duniversità, e il prof non vuole che usiamo l'istruzione break (la possiamo usare solo nello switch).
|
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
non mi funziona questa riga di codice:
Codice sorgente - presumibilmente C/C++ |
caratteri_finali = (int)strchr(fnp,'\0') - (int)strchr(fnp,da_sostituire);
strncpy(vettore_temporaneo_due, fnp, caratteri_finali); /*i è la posizione del carattere che devo sostituire, perchè l'ho messa in un ciclo for*/
|
La mia domanda è: la funzione strncpy può accettare come terzo parametro una variabile o solo un numero costante di caratteri ?
Perchè quando vado a compilare mi questo bellissimissimo errore:
*** buffer overflow detected ***: ./prog_aut terminated
DOUCH !!!!!
|
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
mi correggo,la funzione che mi da problemi è questa
Codice sorgente - presumibilmente Plain Text |
strcpy(vettore_temporaneo_due, strchr(fnp,'\0')-5);
|
E volevo chiedere una cosa: allora, se mette 5, mi stampa prende gli ultimi 5 elementi,e va bene; il problema è che io vorrei metterci una variabile invece del 5; è possibile ?
|
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
ecco un ulteriore aggiornamento: mi funziona solo se copio l'ultimo carattere, cioè se metto 1
mentre se metto un altro numero, o variabile mi da sempre l'errore di overflow
|
|
dmr (Normal User)
Pro
Messaggi: 141
Iscritto: 04/01/2012
|
In questo modo se fai:
Codice sorgente - presumibilmente Plain Text |
strcpy(vettore_temporaneo_due, strchr(fnp,'\0')-5);
|
la stringa contenuta in fnp deve essere lunga almeno 5 caratteri.
Ultima modifica effettuata da dmr il 12/08/2012 alle 8:04 |
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
so che è giusto, e l'ho anche capito, ma non so perchè continua darmi quell'errore di overflow se metto un numero più grande di 1. Io non capisco proprio: tanto, ascolta: io ho queste dimensioni: fnp[50], vettore_temporaneo_uno[20], vettore_temporaneo_due[15].
Dovrebbero andar bene ma non mi fa.
Poi l'altro problema è che io, invece di metterci un numero fisso, come 1 o 5, vorrei metterci una variabile. E' possibile ?
|
|