只是想知道,给出以下代码代码片段
#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]
,但它没有用。
非常感谢任何帮助/提示。
答案 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)数组中的字符是 写入(但不包括)终止空字符。 [...]