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]
,但它没有奏效。
任何帮助/提示将不胜感激。
答
将您的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);
}
}
答
更改此:
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的阵列的初始 元件)从阵列的字符是 写入直到(但不包括)的终止空字符。 [...]
编译器不会在这里提示你不好:'printf(“%s \ n”,direntp-> d_name [0]);'? – alk