Domanda

Ho una funzione che restituisce un array di lunghezze diverse in base a una tabella di ricerca. Sto malloc'ing memoria necessaria per esso all'interno della funzione, ma poi come faccio a riempire l'array dal suo puntatore? Il compilatore sta gettando stesso errore per entrambi i miei tentativi (linee commentate). Si prega di aiutare!

int lookup(const char *name, float *factors) {
    int length;
    if(!strcmp(name, "foo")) {
        length = 6;
        factors = malloc(length * sizeof(float));
        // *factors = {0, -0.9, -4.9, -8, -7.8, -23.9};
        // factors = {0, -0.9, -4.9, -8, -7.8, -23.9};
    }
    else if(!strcmp(name, "bar"))
    {
        length = 4;
        factors = malloc(length * sizeof(float));
        // *factors = {0, -3, -6, -9};
    }
    // .......................
    // more else if branches
    // .......................
    else    // error: name not found in table
    {
        factors = NULL;
        fprintf(stderr, "name not found in table!!\n");
        return 0;
    }
    return length;
}
È stato utile?

Soluzione

static const float[] initials = { .... };
factors = malloc(sizeof(initials));
memmove(factors,initials,sizeof(initials));

Altri suggerimenti

Utilizza la notazione di matrice -. Fattori [index]

un po 'che ho codificato dritto C, quindi perdona errori minori, ma provate

const float[] initialValue = {0, -0.9, -4.9, -8, -7.8, -23.9};
for (int i=0; i<length; i++)
{
    factors[i] = initialValue[i];
}

Il problema di fondo è che si sta cercando di usare la sintassi per l'inizializzazione delle costanti per inizializzare una variabile dinamica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top