有人可以帮助我吗?我正在尝试检查每个目录条目,如果其名称中存在一个字母。显然它不起作用。我的主要问题是我在使用名单[n] - > d_name作为内存时是否正确使用了memchr?
#include <dirent.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
int main(void)
{
struct dirent **namelist;
int n;
n = scandir(".", &namelist, 0, alphasort);
if (n < 0)
perror("scandir");
else
{
char * search;
while (n--) {
search= (char*) memchr(namelist[n]->d_name,'a',(sizeof(namelist[n]->d_name)));
if(search !=NULL){
printf("%s\n", namelist[n]->d_name);
free(namelist[n]);
}
char * search;
}
free(namelist);
}
}
答案 0 :(得分:1)
该代码实际上适用于我(在Win7 / CygWin下):
pax$ ./qq
xyzzyaf
xyzzyae
xyzzyad
xyzzyac
xyzzyab
xyzzyaa
.bashrc
.bash_profile
.bash_history
pax$ ls -ad *a* .*a*
.bash_history .bash_profile .bashrc xyzzyaa
xyzzyab xyzzyac xyzzyad xyzzyae
xyzzyaf
但你为什么要使用memchr
? d_name
字段是C风格的字符串,可以在其上执行printf("%s\n",...)
这一事实证明。
您应该使用strchr
。使用memchr
可能搜索字符串的结尾,如果在其后的任何垃圾中找到a
,可能会给出错误的结果。
如果这对您没有帮助,那么您需要定义短语“显然它不起作用”。换句话说,目录中的所有文件是什么以及您获得了什么输出?这将大大有助于解决这个问题。
答案 1 :(得分:0)