Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Suche Funktion
Gehen Sie zu Seite 1, 2  Weiter
 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Boron
Gast





BeitragVerfasst am: 09. Sep 2001 16:32   Titel: Suche Funktion

Hallöchen zusammen,

ich bin gerade dabei ein Konsolenprogramm für Dos nach Linux zu portieren. In den Quellen ist jetzt nur noch eine Funktion namens "__itoa" (integer to ascii), die dem gcc nicht gefällt (Dos-Quellen wurden unter Visual C++ erstellt).
Gibt es unter Linux eine vergleichbare Funktion, da __itoa wohl nur unter Windows existiert auf MS's Mist gewachsen scheint?

Thanks in advance

Boron
 

Sebastian Ude
Gast





BeitragVerfasst am: 09. Sep 2001 17:03   Titel: Re: Suche Funktion

Mach halt soetwas in der Art:

code:
char * my_itoa(int number)
{
char *result = malloc(20);
if (result != NULL)
snprintf(result, 20, "%d", number);
return result;
}




> da __itoa wohl nur unter Windows
> existiert auf MS's Mist gewachsen scheint ?

ANSI ist es auf keinen Fall .
 

hjb
Pro-Linux


Anmeldungsdatum: 15.08.1999
Beiträge: 3236
Wohnort: Bruchsal

BeitragVerfasst am: 10. Sep 2001 9:04   Titel: Re: Suche Funktion

Hi,

laß die beiden Underscores weg (MS-Dummheit), und schon sollte es auch unter Linux klappen.

Gruß,
hjb
_________________
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger

Jochen
Gast





BeitragVerfasst am: 10. Sep 2001 9:33   Titel: Re: Suche Funktion

@hjb:

Das habe ich zuerst auch gedacht, ist aber nicht. Wahrscheinlich denkst Du gerade an atoi() (wie ich auch zuerst). Zu itoa habe ich aber keine man-Page oder sonst eine Referenz gefunden, selbst ein

find /usr/include -name "*.h" -print | xargs grep itoa

war ergebnisfrei. Sebastian hat schon recht...

Jochen
 

andy



Anmeldungsdatum: 07.11.1999
Beiträge: 150
Wohnort: Kiel

BeitragVerfasst am: 19. Sep 2001 11:39   Titel: Re: Suche Funktion

Du mußt noch eine Headerdatai mit einbinden.
Das müßte eigentlich die stdlib.h oder die string.h sein.
Dann sollte es gehen.
Kann leider gerade nicht nachschauen, da ich hier keine Linuxkiste habe.
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

andy



Anmeldungsdatum: 07.11.1999
Beiträge: 150
Wohnort: Kiel

BeitragVerfasst am: 19. Sep 2001 11:44   Titel: Re: Suche Funktion

Fällt mir gerade noch ein. Es könnte auch die ctype.h sein.
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Sebastian Ude
Gast





BeitragVerfasst am: 19. Sep 2001 12:13   Titel: Re: Suche Funktion

@ Andreas

Zumindest bei glibc 2.2.3 gibt es definitiv *keine* itoa-Routine, wie ein rekursives grep über die Headers (genau wie bei Jochen) ergab - da kannst du includen was du willst, hilft alles nichts.

Man muss dazu auch wissen, dass itoa soweit ich weiss weder ANSI noch POSIX ist (sonst wäre es auch in der glibc implementiert worden).

Die Funktion ist aber selber nicht allzu schwer zu implementieren (s.o).
 

aby
Gast





BeitragVerfasst am: 19. Sep 2001 21:26   Titel: Re: Suche Funktion toascii ();

da gäbe es noch toascii (); ich glaube in ctype.h
 

Sebastian Ude
Gast





BeitragVerfasst am: 19. Sep 2001 21:42   Titel: Re: Suche Funktion

man toascii

[...]

int (!) toascii (int c);


DESCRIPTION

toascii() converts c to a 7-bit unsigned char value that fits into the ASCII character set, by clearing the high-order bits.

[...]

Ist nicht ganz das was wir suchen.

Ich bleib immer noch bei snprintf.
 

Boron
Gast





BeitragVerfasst am: 20. Sep 2001 15:47   Titel: Re: Suche Funktion

Hi,

irgendwie hat das mit "snprintf" nicht hingehauen, also hab ich mir selbst was Wildes gebastelt.
Trotzdem danke.

Gruss Boron
 

Sebastian Ude
Gast





BeitragVerfasst am: 20. Sep 2001 16:03   Titel: Re: Suche Funktion

@ Boron

Ein häufig gemachter Fehler bei einer eigenen itoa-Implementierung ist soetwas:

code:
char* itoa(int number)
{
char result[20];
snprintf(result, 20, "%d", number);
return result;
}



Das ist falsch, falsch, falsch und nocheinmal falsch.

Denn das Array wird beim Austreten aus der Routine zerstört, und folglich ist es undefiniert, auf was die zurückgegebene Adresse danach zeigt - aber auf jeden Fall *nicht* auf das Array !


Folglich ist es wichtig, dass man den Speicher wirklich durch malloc allociert und selbstverständlich überprüft, ob die Allocierung erfolgreich war.

Ganz gute Programmierer können jetzt noch argumentieren, dass man die in meinem Beispiel fest definierte Grösse von 20 Zeichen (abzüglich NULL-Character) für die Representierung eines int-Wertes auf andere Art und Weise verlässlich herausfinden könnte - aber auf die 7, 8 Bytes kommts nun auch nicht an .
 

brotzi
Gast





BeitragVerfasst am: 21. Sep 2001 14:48   Titel: Re: Suche Funktion

Man kann auch

static char buf[10];

angeben!
 

Kyle
Gast





BeitragVerfasst am: 23. Sep 2001 10:11   Titel: Re: Suche Funktion

int itoa(int number, char* array)
{
...
}

ist auch nicht schlecht dann geht man auf nummer sicher das array schon von ausserhalb der funktion angelegt wurden ist und so keine missverständnisse bei der specher allokierung besteht.

Bei dem Vorschlag:

char* itoa(int number)
{
static char result[20];
snprintf(result, 20, "%d", number);
return result;
}

und was macht die funktion wenn jemand free(result) macht? dann schlägt jede weiterer versuch fehl, wenn die funktion ausgeführt wird. Oder was passiert bei

char* foo1;
char* foo2;

foo1 = itoa(10);
foo2 = itoa(20);

Der speicher von foo1 <b> und </b> foo2 ist verändert.

Bei char* itoa(int number) wer löscht den Speicher der dabei anfällt? Das ist so nicht klar.
 

Sebastian Ude
Gast





BeitragVerfasst am: 23. Sep 2001 10:26   Titel: Re: Suche Funktion

> Bei char* itoa(int number) wer löscht den
> Speicher der dabei anfällt? Das ist so
> nicht klar.

Der Programmierer.

Alternativ kann man ein itoa ja auch als Makro implementieren und alloca statt malloc benutzen, dann spart man sich die Speicher-Freigabe-Frage.
 

Boron
Gast





BeitragVerfasst am: 23. Sep 2001 15:10   Titel: Re: Suche Funktion

Oh Mann, vier Semester Studium "Technische Informatik", und ich Depp mach genau den Fehler den Sebastian Ude ankreidet.
Klar wird das result array zerstört wenn ich auf die malloc Version verzichte. Wie konnte ich nur so blöd sein (*kopfpaarmalgegentischschlag*).

Gruss Boron
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Gehen Sie zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy