2016-04-16 8 views
1

Ich studierte C-Code aus einem College-Buch, das ich habe (das Thema des Buches ist Linux-Programmierung), und ich stieß auf einige Zeilen Code, die ich nicht verstehe. Ich habe etwas recherchiert, aber ich habe nichts im Internet gefunden. Kann mir jemand diesen Code erklären?Wie funktioniert diese Funktionszuweisung?

Ich weiß, welche Umgebungsvariablen sind, der Teil, den ich nicht verstehe, ist, wie diese int (*det)(), det() Funktion funktioniert. Tut mir leid, wenn mein Titel nicht korrekt ist, ich wusste einfach nicht, wie ich das Thema besser beschreiben sollte.

*** Vielen Dank für Ihre Antworten. Gibt es irgendeine Möglichkeit, dieses Programm funktionsfähig zu machen, zum Beispiel "hallo" drucken?

+1

Bester Troll, den ich hier diese Woche gelesen habe. –

+0

'stidio.h', ernsthaft? –

+0

Das Schlüsselwort, nach dem gesucht werden soll, ist "Function Pointers" –

Antwort

1

Als jemand bereits darauf hingewiesen

det = getenv("foo"); 

macht nicht viel Sinn machen, und ich hoffe, dass Ihr Compiler ist intelligent genug, so , dass Sie nicht weg bekommen mit it.Below sein könnte, was Sie erwartet hatten zu siehe in diesem Buch:

#include <stdio.h> 
#include <stdlib.h> 

extern char* getenv(const char*); 
/* The above statement is not mandatory but would make the code more 
* readable. The keyword "extern" here implies that the function is 
* is defined elsewhere. 
*/ 

int main(void) 
{ 
    char* (*det)(const char*) = getenv; 
    printf("PATH env variable contains : %s\n", (*det)("PATH")); 
    /* Replace path with your own environment variable */ 
    printf("Press any key to continue..\n"); 
    getchar(); 
    return 0; 
} 

ich gerade Druck ein paar Sachen hier, die Nutzung ändern, um Ihre Bedürfnisse zu befriedigen.

Referenzen

getenv() Prototyp hier.

5

Im Allgemeinen funktioniert es nicht. Sie versuchen, einem Funktionszeiger einen char* (string) zuzuweisen. Ein vernünftiger Compiler wird dies ablehnen.

Allerdings sind nicht alle Compiler in Ordnung. Wenn Sie diesen Code kompilieren und ausführen, haben Sie ein Programm erstellt, das anfällig für Angriffe über die Umgebungsvariable foo ist. Denn wenn Sie den Inhalt von foo ausführen und sie tatsächlich auf Ihrem Computer ausführbar sind, haben Sie die Steuerung des Prozesses aus Ihrem C-Programm in den Code foo verschoben. Dies ist nicht portierbar, wahrscheinlich nicht funktionierend, definitiv unsicher und sollte niemals versucht werden.

Auch das Buch, von dem Sie das haben, ist vermutlich etwas über Informationssicherheit. Wenn nicht, brenne es.

Verwandte Themen