Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - copia e concatena stringhe
Forum - C/C++ - copia e concatena stringhe - Pagina 2

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 13:10
Venerdì, 10/08/2012
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

  1. 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

  1. 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 ?

PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 21:33
Venerdì, 10/08/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#

  1. char *funzione(char *str)
  2. {
  3.   char *tmp=malloc(20);// primo array dove copio tutti i caratteri dopo z
  4.   char *tmp2=malloc(20);// array con la stringa modificata
  5.   char *ptr=tmp2;// puntatore a tmp2 perchè il puntatore tmp2 viene modificato
  6.   int flag=0;// flag in modo da fermarsi alla seconda z
  7.   strcpy(tmp,"f(y)");// copio su tmp f(y)
  8.   strcat(tmp,strrchr(str,'z')+1);// copio su tmp tutti i caratteri dopo z
  9.   for(;*str!='\0';str++)
  10.   {
  11.     if(*str=='z')
  12.     {
  13.       flag++;
  14.     }
  15.     if(flag==2)break;
  16.     *tmp2++=*str;// copio tutte le cose prima di z
  17.   }
  18.   strcat(tmp2,tmp);// concatenamento finale
  19.   free(tmp);
  20.   return ptr;
  21. }


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
PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 12:51
Sabato, 11/08/2012
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).
:(

PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 22:52
Sabato, 11/08/2012
non mi funziona questa riga di codice:

Codice sorgente - presumibilmente C/C++

  1. caratteri_finali = (int)strchr(fnp,'\0') - (int)strchr(fnp,da_sostituire);
  2. 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 !!!!! :(

PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 23:18
Sabato, 11/08/2012
mi correggo,la funzione che mi da problemi è questa

Codice sorgente - presumibilmente Plain Text

  1. 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 ?

PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 23:36
Sabato, 11/08/2012
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

:(

PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 8:03
Domenica, 12/08/2012
In questo modo se fai:
Codice sorgente - presumibilmente Plain Text

  1. 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
PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 14:40
Domenica, 12/08/2012
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 ?

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo