2016-11-20 2 views
0

ich lerne und richtig, diesen Teil mit C. ArbeitsC - Arbeiten mit Zeigern auf Zeiger hat Argumente in fuction

mir eine Übung mache und muß eine Funktion schreiben, die ein Bild zurück versuchen zu verstehen, aber hat einen Zeiger auf den Zeiger, der einen Wert speichern muss, falls ein Fehler auftritt.

FYI: Die Funktion wird in einem Modul gespeichert, das in der Hauptdatei enthalten ist.

Hier ist eine Unterschrift Erklärung meines Codes:

Img imageFromFile(const char * filename, char ** messageErreur) { 

if (error) 
messageErreur = 1; //Trying to pass 1 has error code out of the function 

} 

und ich halte auf diese Nachricht bekommen, wenn ich kompilieren:

img.c:148:23: attention : assignment makes pointer from integer without a cast 
    messageErreur = 1; //Trying to pass 1 has error code out of the function 

Ich weiß nicht, was ich bin Beachten Sie, was ich in der Hauptdatei deklarieren muss, um diese Funktion weiterzugeben.

Es ist ein Zeiger auf einen Zeiger, also muss ich einen Zeiger vom Typ char [] erstellen?

Die Adresse übergeben "& Zeiger" beim Aufruf der Funktion?

Antwort

2

Der Aufrufer stellt einen Zeiger auf einen char-Zeiger bereit, dh Sie haben die Möglichkeit erhalten, dem Aufrufer ein char * zurückzugeben. Um dies zu tun, erste dereferenzieren der char ** und dann das Zeichen zuweisen * Sie zurückgeben möchten:

*messageErreur = "some string"; 
*messageErreur = someRuntimeAllocatedStringBuffer; 

immer vorsichtig sein, dass, wenn der Anrufer gegeben wurde, um den Zeiger auf „einige Fehler string“ sie es nicht ändern müssen (und würde normalerweise nicht für eine zurückgegebene Nachricht).

+0

Also es ist wahr, ich vergaß zu berücksichtigen, dass "einige Zeichenfolge" ist eine Reihe von char! – Cyberflow

1

messageErrueur ist ein Zeiger, der auf einen Zeichenzeiger zeigt. Dieser Zeichenzeiger zeigt auf eine Zeichenfolge, die vermutlich die Fehlermeldung sein wird. So können sagen, dass es eine Fehlermeldung außerhalb der Funktion erklärt:

char * error = "error message"

Im Inneren des imgFromFile, wo Sie messageErrueur zuweisen, würden Sie messageErrueur Punkt error wie diese machen:

messageErrueur = &error;

Das kaufmännische Und (&) gibt die Adresse char * error an messageErrueur, so dass jetzt messageErrueur die Zeichen betrachtet, die beigespeichert werden.

Korrigieren Sie mich, wenn ich die Frage falsch verstanden habe. Hoffe das hilft!