2017-04-09 60 views
1

只是想知道,因爲下面的代碼的代碼片段C:獲得d_name的第一個字符

#include <stdio.h> 
#include <sys/types.h> 
#include <dirent.h> 

void do_ls(char []); 

main(int ac, char *av[]) 
{ 
    if (ac == 1) 
     do_ls("."); 
    else 
     while (--ac){ 
      printf("%s:\n", *++av); 
      do_ls(*av); 
    } 
} 

void do_ls(char dirname[]) 



{ 
    DIR  *dir_ptr;  /* the directory */ 
    struct dirent *direntp;  /* each entry */ 

    if ((dir_ptr = opendir(dirname)) == NULL) 
     fprintf(stderr,"ls1: cannot open %s\n", dirname); 
    else 
    { 
     while ((direntp = readdir(dir_ptr)) != NULL) 
      printf("%s\n", direntp->d_name[0]); 
     closedir(dir_ptr); 
    } 
} 

而不是讓每個條目,如何獲取每個條目的特定字符(例如全名名字中的第一個字符)而不是全名。在代碼中,我試圖使用direntp->d_name[0],但它沒有奏效。

任何幫助/提示將不勝感激。

+1

編譯器不會在這裏提示你不好:'printf(「%s \ n」,direntp-> d_name [0]);'? – alk

回答

1

將您的printf中的%s更改爲%c,將打印出一個字符。

#include <stdio.h> 
#include <sys/types.h> 
#include <dirent.h> 

void do_ls(char []); 

int main(int ac, char *av[]) 
{ 
    if (ac == 1) 
     do_ls("."); 
    else { 
     while (--ac) { 
      printf("%s:\n", *++av); 
      do_ls(*av); 
     } 
    } 
    return 0; 
} 

void do_ls(char dirname[]) 
{ 
    DIR  *dir_ptr;  /* the directory */ 
    struct dirent *direntp;  /* each entry */ 

    if ((dir_ptr = opendir(dirname)) == NULL) 
     fprintf(stderr,"ls1: cannot open %s\n", dirname); 
    else 
    { 
     while ((direntp = readdir(dir_ptr)) != NULL) 
      printf("%c\n", direntp->d_name[0]); 
     closedir(dir_ptr); 
    } 
} 
+0

「* this *」:什麼? – alk

+0

@JoeKur是的,像'if(direntp-> d_name [0] =='t')' – julekgwa

0

更改此:

printf("%s\n", direntp->d_name[0]); 

printf("%c\n", direntp->d_name[0]); 

From the C11 Standard (draft)

7.21.6.1的fprintf功能

[...]

8轉換標識符和它們的含義如下:

c [...] int參數轉換爲 unsigned char時,產生的字符被寫入。 [...]

s [...]的參數應該是指向字符type.280的陣列的初始 元件)從陣列的字符是 寫入直到(但不包括)的終止空字符。 [...]