2016-04-17 3 views
-1

haben einige Probleme mit dem Drucken Verzeichnisliste, mit write() syscall. Ich muss dies drucken, ohne printf oder fprintf(stdout) zu verwenden. Hier ist mein Code:Warum schreibt (fileno (stdout)) nicht mit ent-> d_name?

#include <dirent.h> 
#include <stdio.h> 

int main (void) { 
    DIR *dir; 
    struct dirent *ent; 
    char directory[256] = "/Users"; 
    dir = opendir(directory); 

    while (ent=readdir(dir)) { 
     write(fileno(stdout), ent->d_name, sizeof(ent->d_name)); 
    } 
    closedir(dir); 
    return 0; 
} 

Und hier ist mein Ausgang (mac os/Users/Ordner):

...!("((
.localized"(∞R Shared∞R €€€(vackdaled..!("((
.localized"(∞R Shared∞R €€€(vackdaled.localized"(∞R Shared∞R €€€(vackdaledShared∞R €€€(vackdaledvackdaled 

Aber wenn ich printf Funktion zu verwenden, es stellt sich heraus, wie folgt aus:

. 
.. 
.localized 
Shared 
vackdale 

Antwort

2

Sie müssen die Länge der Zeichenfolge an die Schreibfunktion übergeben, nicht die Größe des Puffers.

Versuchen Sie strlen(ent->d_name) statt sizeof(ent->d_name).

Verwandte Themen