从目前开始,如果您删除IF语句if(strncmp(strup(buff,len) + len - 4, ".txt", 4) == 0)
,该代码将打印出当前目录中的所有文件以及当前目录中的目录等。但是,我想设计一个IF语句,以便仅打印出我选择的文件,在下面的示例中,我试图使其仅打印出“ .txt”,但是,我似乎无法弄清楚如何正确设计条件语句。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#define sizeFileName 500
#define filesMax 5000
int main( int argc, char ** argv) {
FILE * fp = popen( "find . -type f", "r");
char buff[sizeFilesName];
int nFiles = 0;
char * files[filesMax];
while(fgets(buff,sizeFileName,fp)) {
int len = strlen(buff) - 1;
if(strncmp(strup(buff,len) + len - 4, ".txt", 4) == 0){
files[nFiles] = strndup(buff,len);
printf("\t%s\n", files[nFiles]);
nFiles ++;
}
}
fclose(fp);
printf("Found %d files:\n", nFiles);
// clean up
for(int i = 0; i < nFiles ; i ++ ) {
free(files[i]);
}
return 0;
}
旁注:基本上,我的想法是,我认为某些char持有较大的路径名称,例如“ folder / folder / folder / file.txt”,如果可以的话,基本上可以比较文件“ .txt”和“”。 txt”,那么它将被接受并打印到控制台中。
答案 0 :(得分:0)
您不是从字符串的正确偏移处开始的。您要检查最后4个字符,所以从偏移量strlen(buf) - 4
开始。
int len = strlen(buff);
if (strncmp(buff + len - 4, ".txt", 4) == 0) {