ディレクトリを検索してコマンドライン引数に一致するコンテンツを一覧表示するプログラムを作成しようとしているときに、見つけ出す。whileループで、C言語でreaddir()と一緒になっていない場合
文字列が一致するかどうかを確認するためにwhileループ内にif文を入れましたが、問題はディレクトリの最後のエントリだけを取得することです。 if文をコメントアウトすると、ディレクトリ全体が正常に出力され、文字列は正常に一致しますが、両方を行うことはできません。
友人はスタックと何か関係があると示唆していましたが、読んだ後に印刷されているので、なぜそうなるはずはありません。
DIR *dirPos;
struct dirent * entry;
struct stat st;
char *pattern = argv[argc-1];
//----------------------
//a few error checks for command line and file opening
//----------------------
//Open directory
if ((dirPos = opendir(".")) == NULL){
//error message if null
}
//Print entry
while ((entry = readdir(dirPos)) != NULL){
if (!strcmp(entry->d_name, pattern)){
stat(entry->d_name, &st);
printf("%s\t%d\n", entry->d_name, st.st_size);
}
}
あなたの問題を正しく理解していれば、いくつかのregext APIを使いたいと思っています。 strcmpはパターンに一致しませんが、文字列と完全に一致します。 – PnotNP
明らかに、あなたのプログラムは<パターンに格納されているもの>というエントリを出力し、2つの異なるエントリには同じ名前を付けることができないため、1つのエントリだけを出力します。 – immibis
注意: 'stat()'にはフルパスが必要です。 – joop