C: 获取 d_name 的第一个字符

标签 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] 但它没有用。

如有任何帮助/提示,​​我们将不胜感激。

最佳答案

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

关于C: 获取 d_name 的第一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43305417/

相关文章:

c++ - 在iOS上执行pthread_cancel时,堆中的内存会被释放吗?

第二次 calloc 问题 - 在 C 上

c - 具有嵌套 .h 文件的项目的 makefile

php - 关于如何存储/管理数据库中条目的文件的建议

c++ - 为什么代码打印所有第一个索引?

c - fork() with char array and qsort() resulting child 停止工作

svn - 如何明确告诉 SVN 将文件视为文本而不是二进制文件

c++ - 指向结构或类的指针与指向第一个字段的指针

c++ - 如何清除 C++ 中的动态数组以及堆栈中有多少?

c - 在 C 中序列化函数