C:获取d_name的第一个字符

时间:2017-04-09 10:01:13

标签: c file struct directory

只是想知道,给出以下代码代码片段

#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],但它没有用。

非常感谢任何帮助/提示。

2 个答案:

答案 0 :(得分:1)

%s更改为%c中的printf,这将打印一个字符。

#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);
    }
}

答案 1 :(得分: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 [...]参数应该是指向初始的指针   字符数组的元素.280)数组中的字符是   写入(但不包括)终止空字符。 [...]