Optionsvektor durchlaufen -> Review gefragt



  • Hallo,

    Folgende Funktion soll in einem CGI die Werte der mitgegeben Variablen auslesen. Mit dem Debuggen von CGI's habe ich mühe, da es entweder nur ganz oder gar nicht geht.

    Der Optionsvektor hat folgende Struktur:

    char * pArgList[4];
    
    	pArgList[0]="opta";
    	pArgList[1]="25";
    	pArgList[2]="optb";
    	pArgList[3]="33";
    

    Die folgende Funktion soll den Wert zu einer gegeben Variable ausgeben:

    char* getVariableValue(char* pVariableName, char** pVariableVector) {
    	// Unabhängige Kopien der Pointers erstellen
    	char* pTmpResult = NULL;
    	char** pCopyVariableVector = pVariableVector;
    	int i=sizeof(pCopyVariableVector);
    
    	while ( i>0 && pTmpResult == NULL) {
    		printf("\n<br>%d, Zeige auf: %p \n<br>",i, *pCopyVariableVector);
    
    		if (strcmp(pVariableName, *pCopyVariableVector) == 0) {
    			// if found, the next entry will be the value
    			pTmpResult = *(pCopyVariableVector + 1);
    		}
    		pCopyVariableVector++;
    		i--;
    
    	}
    	return pTmpResult;
    }
    

    Problem: Falls es die angefragte Variable (z.Bsp. A) nicht gibt, schmiert das Programm mit einem Segmentation-Fault ab. Die While-Schleife scheint das die Grenzen des Arrays zu überschreiten.

    Frage: Die unabhängige Kopie des Pointers ist doch notwendig, falls ich diesen ausserhalb der Funktion weiter verarbeiten möchte?

    danke für die Hilfe



  • hi,

    sizeof(pCopyVariableVector);
    

    das liefert nicht die anzahl der elemente, sondern die größe von char** in byte.



  • Stimmt ja! 🙄

    Kann es sein, dass ich die Anzahl-Elemente eines dynamisch allozierten Arrays gar nicht mit der sizeof() Funktion ermitteln kann?

    Demnach müsste ich mit dem Null-Terminator arbeiten bzw. diesen als Marker am Ende des Arrays einfügen.



  • so ist das



  • maus_on_c schrieb:

    Demnach müsste ich mit dem Null-Terminator arbeiten bzw. diesen als Marker am Ende des Arrays einfügen.

    das ist nicht so gut, weil zur ermittlung der anzahl der elemente das array durchlaufen werden muss. besser ist es, die anzahl in einer separaten variable zu speichern.


Anmelden zum Antworten