char Pointer Funktion, Rückgabewert und char Abfragen!
-
Hallo Leute, kleines Problemchen:
Ich besitze eine char pointer funktion zum einlesen von text im stil von (void *blablub() )
lese dort char zeichen ein und müsste dort 3 abfragen einbauen, die ich irgendwie nicht hinbekomme?
da Speicher dynamisch angefordert wird ist eine abfrage "out of memory" sprich
realloc liefert 0 zurück.if(input_buffer== 0)
{
free(backup_inputbuffer);
return (input_buffer = "-1");
}da ist auch schon mein problem Nr 2 ich habe ein char Pointer und muss aber als returnwert "-1" zurück liefern in die main funktion was nicht funktioniert?
die anderen 2 abfragen wären analog dazu: Abfrage ob ein Zeichen über ASCII 127 vorhanden ist bzw ob EOF das erste eingelesen zeichen ist.
Hoffe um eure Hilfe und vielen Dank im Vorhinein
Lg Mike
-
housel schrieb:
da ist auch schon mein problem Nr 2 ich habe ein char Pointer und muss aber als returnwert "-1" zurück liefern in die main funktion was nicht funktioniert?
Keiner zwingt dich, -1 zurückzugeben! Es hört sich so an, als würdest du davon ausgehen, nur so einen Fehler melden zu können. Du hast jetzt mehrere Möglichkeiten. Du könntest bei der -1 Schiene bleiben. Dann müsste der char*, den du zurückgeben willst, einfach ein Parameter der Funktion sein (ist ja dann ein by-reference-Parameter, auch ein Weg, etwas zurückzugeben). Oder du sagst einfach, im Fehlerfall wird 0 (NULL) zurückgegeben. Daran sieht der Aufrufer auch ziemlich eindeutig, dass was schiefgegangen ist (aber nicht, was genau). Oder du wirfst eine Exception. Dann könntest du auch zwischen mehreren Fehlertypen unterscheiden (ähnlich wie mit Return Codes).
-
_matze schrieb:
Oder du wirfst eine Exception. Dann könntest du auch zwischen mehreren Fehlertypen unterscheiden (ähnlich wie mit Return Codes).
Wie soll das gehen in C?
Wenn der OP die Funktion umbauen kann, ist die Rückgabe eines Errorlevels eigentlich probater als eine by- reference- Übergabe. Alsoint blahblubb(char **buffer) //bevorzugt
oder
void blahblubb(int *errorlevel, char **buffer) // ungewöhnlicher
Alternativ könnte er im Fall des Mißlingens von realloc/malloc NULL für den Buffer schreiben und andere Fehler als Text im Buffer hinterlegen. Da wäre dann ein festes Übergabeformat probat, wie etwa "#####\n", wobei dann noch der String in int zu wandeln und dann zu splitten wäre - performant wird das nicht. Andere Möglichkeiten sehe ich in C nicht.
-
pointercrash() schrieb:
_matze schrieb:
Oder du wirfst eine Exception. Dann könntest du auch zwischen mehreren Fehlertypen unterscheiden (ähnlich wie mit Return Codes).
Wie soll das gehen in C?
-
pointercrash() schrieb:
_matze schrieb:
Oder du wirfst eine Exception. Dann könntest du auch zwischen mehreren Fehlertypen unterscheiden (ähnlich wie mit Return Codes).
Wie soll das gehen in C?
Stimmt, sorry. Ich hatte nicht drauf geachtet, dass wir hier im C-Forum sind. Wobei er zumindest mit dem MS-Compiler die __try/__except-Erweiterung nutzen könnte, aber na ja...
pointercrash() schrieb:
Wenn der OP die Funktion umbauen kann, ist die Rückgabe eines Errorlevels eigentlich probater als eine by- reference- Übergabe.
Klar. Ich habe by-reference auf den char* bezogen, nicht auf das ErrorLevel, denn er sprach doch davon, den char-Zeiger zurückzugeben, was für Return Codes ungünstig ist.
pointercrash() schrieb:
Alternativ könnte er im Fall des Mißlingens von realloc/malloc NULL für den Buffer schreiben
Meine Rede.
pointercrash() schrieb:
und andere Fehler als Text im Buffer hinterlegen.
Ja, macht Sinn.