C:获得d_name的第一个字符

问题描述:

只是想知道,因为下面的代码的代码片段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

将您的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

更改此:

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的阵列的初始 元件)从阵列的字符是 写入直到(但不包括)的终止空字符。 [...]