# ANSI-C - itoa() + Linux?



## Jacizzle (14. September 2005)

Hiho ich versuch grad ein Programm mit ANSI - C in Linux zu schreiben und wollte nun (für eine "spezielle" Ausgabe) eine Int-Variable in eine String variable umwandeln...

Nen Fehler dürfte ich nicht gemacht haben

int idays;
char sdays[20];

..... Variablen füllen ...... 

itoa(idays,sdays,10)

Ausgabe

Beim compilieren sagt er mir aber dann das die Funktion itoa nicht existiert... so und nun kann ich mir einfach mal vorstellen, dass es an den Header-Dateien liegt und mir noch irgendeine fehlt wo die funktion definiert ist...

Kann mir da einer helfen und evt. sagen welche header datei ich noch einfügen muss?

Danke im vorraus


----------



## deepthroat (14. September 2005)

Hi.

Die Funktion itoa (bzw. ltoa usw.) existiert nicht in ANSI C. Du kannst aber einfach sprintf bzw. snprintf nehmen.


----------



## Jacizzle (15. September 2005)

Hö? Komisch, hatte ich doch irgendwo mal gelesen das die existiert, aber nuja okay, glaube ich dir.. *g* Danke dir, vielleicht könntest du mir aber noch sagen wie man diese zwei Funktionen dort benutzt? Weil die sagen mir überhaupt nichts, werd nu zwar mal gucken ob ich irgendwo infos zu den funktionen finde, aber zur vorsicht vielleicht mal...

Achso, wenn ich mir die Funktionen so anschaue, sieht das fast so aus als willst du die damit direkt im Fenster ausgeben.. das Problem ist aber, ich müsste das in einer Variable speichern, weil ichs nicht in einem Konsolenfenster ausgeben will, sondern an ein Display senden will und dafür bräuchte ich einen String

Deswegen müsste ich ja auch den Integerwert in einen Stringwert umwandeln .. geht das mit sprintf? bzw. snprintf?


----------



## Endurion (15. September 2005)

Benutze sprintf so:

char   szString[200];

sprintf( szString, "%d", iDays );

Die üblichen Formatierungsstrings sind natürlich auch erlaubt.


----------



## deepthroat (15. September 2005)

@Jacizzle: Hast du denn die Manpages unter Linux nicht installiert? 'man sprintf' - da steht alles zu den Funktionen drin.


----------



## Jacizzle (15. September 2005)

Okay... ich danke euch, das hat jetzt schonmal funktioniert und kurz darauf hab ich die nächste Frage.. 

Mein Problem ist halt, dass eine Zahl aus einer Datei auslese, also logischer Weise (zumindestens für mich ;o)) in nen String abspeicher...

Nun hab ich das Problem, dass ich nicht weiß wie ich den String in ein Integer konvertiere .. weil den String muss ich umwandeln in Integer um die Zahl umzurechnen...

Nach dem umrechnen konvertier ich die um in String um sie auszugeben was ja nun mit sprintf funktioniert...

Kann man mir da evt. auch mal ein Beispiel geben?

@deepthroat: Das Problem ist, ich sitze nun zum erstenmal an einem Linux-Rechner und habe keine Ahnung davon, muss es aber machen.. deswegen weiss ich auch nicht das es sowas gibt wie man pages..

Und ANSI-C habe ich das letzte Mal vor 3 Jahren programmiert, deswegen kann ich mich kaum an diese Funktionen erinnern.. obwohl ich im Kopf habe (zumindestens bei atoi) das ich die Funktionen zu dieser Zeit benutzt habe.. aber könnte daran liegen das ich da mit dem Borland Compiler gearbeitet hab?


----------



## deepthroat (15. September 2005)

Jacizzle hat gesagt.:
			
		

> Mein Problem ist halt, dass eine Zahl aus einer Datei auslese, also logischer Weise (zumindestens für mich ;o)) in nen String abspeicher...


Nee, also logisch wäre (jedenfalls für mich ) die Zahl einfach als Zahl  in eine Variable zu lesen:
	
	
	



```
FILE *file;
if ((file = fopen("datei.txt", "r")) != NULL) {
  /* Datei wurde erfolgreich geöffnet. */
  int ivar;
  if (fscanf (file, "%d", &ivar) == 1) {
    /* es konnte ein Integer Wert erfolgreich aus der Datei 
        gelesen und in die Variable `ivar' gespeichert werden */
    ...
  }
}
```

 'man fscanf'



			
				Jacizzle hat gesagt.:
			
		

> Nun hab ich das Problem, dass ich nicht weiß wie ich den String in ein Integer konvertiere .. weil den String muss ich umwandeln in Integer um die Zahl umzurechnen...


Den Wert im String könntest du mit der Funktion atoi oder strtol in einen Integer konvertieren. Oder du nimmst die Funktion sscanf.

 'man strtol' und 'man atoi'



			
				Jacizzle hat gesagt.:
			
		

> Nach dem umrechnen konvertier ich die um in String um sie auszugeben was ja nun mit sprintf funktioniert...


Also um die Zahl auszugeben, brauchst du sie nicht vorher in einen String zu konvertieren.
	
	
	



```
fprintf (file, "%d", int_zahl);
```

 'man fprintf'



			
				Jacizzle hat gesagt.:
			
		

> Und ANSI-C habe ich das letzte Mal vor 3 Jahren programmiert, deswegen kann ich mich kaum an diese Funktionen erinnern.. obwohl ich im Kopf habe (zumindestens bei atoi) das ich die Funktionen zu dieser Zeit benutzt habe.. aber könnte daran liegen das ich da mit dem Borland Compiler gearbeitet hab?


Also die Funktion atoi gibt es ja auch in Standard C. Die Funktion 
itoa allerdings nicht.


----------



## Jacizzle (15. September 2005)

Ich danke euch echt, nu funktioniert alles 

@ deepthroat:
Das Problem war, die Datei war so aufgebaut das zwei Zahlen hinteinander standen /stehen 230484.09 283784.02  und ich brauchte nur die erste davon, aber ich muss ehrlich zugeben ich hät auch nicht mehr auf anhieb gewusst, dass man die direkt aus der Datei als Integer auslesen kann  :-( is schon zu lang her das ich mit diesen komischen Files gearbeitet hab, irgendwann gewöhnt man sich halt an Datenbanken  Aber egal nun funktioniert alles und ich dank euch für die hilfe, hat echt geholfen...


----------

