Durchlaufen int array unbekannter Länge

Ich versuche zu iterieren durch ein array enthalten wird bis zu maximal 4 Elemente - keine anderen Erkenntnisse der array-Länge vorhanden ist.

Pseudo-Code

void insert_vals(uint8_t num, uint8_t *match_num, uint8_t *value)
{
    uint8_t i;

    while(data_exists)  //how do I determine if data exists in 'value'?
    {
        switch(num)
        {
            case 0:
            {
                switch(match_num[i])
                {
                    case 0:
                        hw0reg0 = value[i];
                    case 1:
                        hw0reg1 = value[i];
                    case 2:
                        hw0reg2 = value[i];
                    case 3:
                        hw0reg3 = value[i];
                }
            }
            case 1:
            {
                switch(match_num[i])
                {
                    case 0:
                        hw1reg0 = value[i];
                    case 1:
                        hw1reg1 = value[i];
                    case 2:
                        hw1reg2 = value[i];
                    case 3:
                        hw1reg3 = value[i];                 
                }
            }
            //etc. 2 other cases
        }
        i++;
    }
}

Aufrufen Beispiel (Pseudo-Code)

/*
 * num: hardware device select from 1 - 4
 * match_num: 4 possible matches for each hardware device
 * value: 32-bit values to be assigned to 4 possible matches
 * NOTE: This function assumes hardware devices are selected
 * in a consecutive order; I will change this later.
 */

 //example calling code - we could have configured 4 hardware devices
 insert_vals(0, [0, 1], [0x00000001, 0x000000FF]);  //arg2 and arg3 equal in length

Wie kann ich dies erreichen?

In ein Zeichen-array, C werden automatisch hinzufügen '\0' an das Ende des Arrays, aber dies scheint nicht der Fall zu sein für ein integer-array. Wenn ich irgendwie in der Lage, um zu bestimmen, die Länge der match_num und value (siehe if - Anweisung) zur Laufzeit ursprünglich, dann, dass es mir erlauben würde, zu erstellen for Schleife.

Bearbeiten

Da ich weiß, dass es maximal 4 Elemente, könnte ich nicht etwas tun, die der folgenden ähnelt?

void insert_vals(uint8_t num, uint8_t *match_num, uint32_t *value)
{
    int i;

    for(i = 0; i < 4; i++)
    {
        if(value[i] == -1)
            break;
        else
        {
            //Assign data
        }
    }
}
.........Magie?
Bitte zeigen Sie den aufrufenden code.
Sorry, Jungs - da haben Sie es.
Dieser Aufruf-code kompiliert für Sie?
Nein, das ist nur pseudo-code. Ich hätte wahrscheinlich zum deklarieren des Arrays außerhalb dem Aufruf der Funktion, richtig?

InformationsquelleAutor Biff | 2013-02-22

Schreibe einen Kommentar