====== tmpnam() ====== ''tmpnam()'' ist definiert in der ''[[start|stdio]]'', die in C über ''stdio.h'', bzw. in C++ über ''cstdio'' eingebunden wird. ===== Funktion ===== ''tmpnam()'' erstellt einen Dateinamen, der sich von allen anderen Dateien unterscheidet und verwendet werden kann, ohne eine andere Datei zu überschreiben. ===== Signatur ===== #include char * tmpnam( char * str ); **string**: Zeiger auf ein char-Array, das mindestens die ''[[L_tmpnam]]'' Zeichen breit ist, alternativ ''[[c:lib:stddef:null|NULL]]''. \\ \\ **Return Value**: Zeiger auf den generierten Namen. Wenn der Parameter ''string'' gesetzt war, wird ''string'' zurückgegeben. Wurde NULL als ''string'' übergeben, so wird ein Zeiger auf ein internes statisches Array zurückgegeben. Schlägt ''tmpnam()'' fehl, so wird ''NULL'' zurückgegeben. ===== Fehlerquellen ===== Wird ''NULL'' für ''string'' übergeben, so wird der Name in einem internen statischen Array erzeugt, dass durch andere Funktionen überschrieben werden könnte. Daher ist es ratsam, den Dateinamen in einem eigenen Array erzeugen zu lassen. ===== Beispiel ===== #include #include int main( void ) { char buffer1[ L_tmpnam ], buffer2[ L_tmpnam ]; char *result1, *result2; tmpnam( buffer1 ); result1 = tmpnam( NULL ); tmpnam( buffer2 ); result2 = tmpnam( NULL ); printf( "buffer1: %s\n", buffer1 ); printf( "result1: %s\n", result1 ); printf( "buffer2: %s\n", buffer2 ); printf( "result2: %s\n", result2 ); return EXIT_SUCCESS; } **Ausgabe**: \\ buffer1: /var/tmp/tmp.0.GQj1JX result1: /var/tmp/tmp.3.HDHkP9 buffer2: /var/tmp/tmp.2.itFpKU result2: /var/tmp/tmp.3.HDHkP9 Hierbei fällt auf, dass beide result-Einträge gleich sind: Das interne, statische Array wurde beim zweiten Aufruf wieder überschrieben. ===== siehe auch ===== [[c:lib:stdio:start|stdio]]: [[c:lib:stdio:fopen()]], [[c:lib:stdio:tmpfile()]], [[c:lib:stdio:printf()]]