Forum: Mikrocontroller und Digitale Elektronik itoa - warum char* itoa?


von Peterl (Gast)


Lesenswert?

Hallo,

auf folgender Seite habe ich die itoa-Funktion nachgelesen:
http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/

Warum ist die Funktion als
1
char *  itoa ( int value, char * str, int base );
 deklariert? Mit Rückgabewert?

Ich gebe doch *str als Eingangsparameter ein. D.h. die Funktion itoa 
speichert den String auf den Zeiger ab. Ein Rückgabewert ist somit gar 
nicht erforderlich. Man könnte sie auch als
1
void itoa
 deklarieren.

Ich habe itoa zur Übung auch mal selber geschrieben und als void 
deklariert.


Ich habe das schon öfters festgestellt, dass Funktionen einen Datentyp 
haben aber eigentlich nichts zurückgeben....


Wwas hat das für Vorteile?

von Marius W. (mw1987)


Lesenswert?

Mit einem Rückgabewert kannst du auf Fehler reagieren. Das macht zwar 
bei itoa vielleicht nicht so arg viel Sinn, aber wenn du beispielsweise 
den Fall konstruierst, dass du itoa mit base=0 aufrufst, dann könnte die 
Funktion NULL  zurückgeben und dir damit mitteilen, dass was schief 
gelaufen ist.

Gruß
Marius

von DirkB (Gast)


Lesenswert?

Du kannst so itoa gleich als Parameter für andere Funktionen benutzen.
Z.B.:
1
puts(itoa(...));

von Simon K. (simon) Benutzerseite


Lesenswert?

Das hat ganz einfach den Sinn um String-Verkettungen in einer Zeile 
schreiben zu können.

z.B.
1
puts(itoa(...));

von Peter II (Gast)


Lesenswert?

damit kann man gleich die ausgabe machen

char[100] p;
printf("%s", itoa( 10, 10, p ) );

von Simon K. (simon) Benutzerseite


Lesenswert?

Peter II schrieb:
> damit kann man gleich die ausgabe machen
>
> char[100] p;
> printf("%s", itoa( 10, 10, p ) );

Das ist aber kein gültiges C ;-)

von Stefan (Gast)


Lesenswert?

Auch in if Ausrücken ist das praktisch:

if (itoa(...)) {
  printf("erfolg");
}
else {
  printf("fehler");
}

von Marwin (Gast)


Lesenswert?

Ja, das ist in der Tat ideal um ueblen, unuebersichtlichen C-Code zu 
produzieren...

von Yalu X. (yalu) (Moderator)


Lesenswert?

Stefan schrieb:
> Auch in if Ausrücken ist das praktisch:
>
> if (itoa(...)) {

Warum sollte man so etwas machen wollen? Die Funktion itoa liefert nur
dann 0 zurück, wenn auch der übergebene Char-Pointer 0 ist. Wenn dieser
Fall tatsächlich auftreten kann, sollte er schon vor dem Aufruf von itoa
abgefangen werden.

Der wahre Grund, warum itoa den übergebenen Pointer als Rückgabewert
liefert, wurde schon mehrfach genannt:

Man kann
1
  puts(itoa(n, str, base));

statt
1
  itoa(n, str, base);
2
  puts(str);

schreiben.

von DirkB (Gast)


Lesenswert?

Das ist auch der Grund warum strcpy, strcat (und noch ein paar andere 
Funktionen) ein char* zurück geben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.