Concatenare puntatori

di il
5 risposte

Concatenare puntatori

Ciao!
Ho un problema... che sembra semplice ma non so come risolvere.
Questo è uno "pseudo-codice":

int currentElem;
uint8_t* a;
uint8_t* b;

currentElem = 0;
b = new uint8_t[numB];
a = new uint8_t[numA];

for(i=0; i<m; i++){     
    a = getValues(m);

    memcpy((b + currentElem), a, numA * sizeof(uint8_t));

    currentElem = currentElem + numA;
} 
Vi spiego un po' il codice e il problema.
Ho la necessita' di concatenare in un unico vettore un certo numero di elementi (dipende da "m").
la funzione getValues dato l'ingresso "m", lo elabora e restituisce un uint_8* (cioè' un puntatore, e forse e' lui il problema?).
A quel punto concateno con memcpy e aggiorno currenElem.

Il problema che ho e'... se provo a fare la "print" del contenuto di "a" so che e' giusta (sto facendo dei test con valori noti per ora), pero' quando la concateno in "b" (a parte il primo ciclo) poi mi trovo valori a caso!!!

ES solo per fare capire il risultato:
m=2
ciclo 1) a="pippo" => ok
ciclo 2) a="pappo" => ok
risultato finale b="pippo204jd30" => sbagliata
Sapete darmi una mano?

5 Risposte

  • Re: Concatenare puntatori

    Il problema non è del tutto chiaro ...

    Ci fai capire quali sono i dati di partenza e cosa vuoi ottenere esattamente?
  • Re: Concatenare puntatori

    Dati di partenza sono il numero massimo di cicli "m" che portano a costruire il vettore "b" di dimensione numB.
    Quello che voglio fare e' concatenare i dati (contenuti nel puntatore "a") che mi vengono restituiti da getValues mettendoli tutti uno dopo l'altro dentro "b".
    Spero di essere stato più chiaro.
  • Re: Concatenare puntatori

    Stiamo parlando di stringhe di caratteri terminate da NULL oppure di semplici byte?

    numB è grande quanto m*numA giusto?

    La getValues(m) restituisce un puntatore ?
  • Re: Concatenare puntatori

    oregon ha scritto:


    Stiamo parlando di stringhe di caratteri terminate da NULL oppure di semplici byte?

    numB è grande quanto m*numA giusto?

    La getValues(m) restituisce un puntatore ?
    semplici byte (ho usato "caratteri" solo nell'esempio per farvi capire il risultato).

    numB si e' grande m*numA

    si la getValues(m) restituisce un puntatore uint8_t*
  • Re: Concatenare puntatori

    Allora a parte questa linea

    a = new uint8_t[numA];

    che non deve essere utilizzata, tutto il resto mi sembra corretto.
Devi accedere o registrarti per scrivere nel forum
5 risposte