|
>strcmp(ent->d_name + strlen(ent-d_name) - 2, ".c") == 0
>勉強不足で申し訳ないんですがこの意味がわからないのですが教えてもらえないでしょうか?
>文字と数字をたしているというのはどういうことでしょう?
文字と文字列は区別して下さい。
ent->d_name + strlen(ent->d_name) - 2
は,「文字列へのポインタ」に対して演算しています。
ent->d_nameは配列型ですが,標準変換によってすぐに最初の要素へのポインタになります。
そして,strlen(ent->d_name)を足すことによって,
ent->d_nameが指す文字列の末尾のナル文字を指すポインタを得て,
2を引くことによって後ろから2文字目を指すポインタを取得しています。
ちなみに,strlen(ent->d_name) >= 2を先に書いたのは,
ent->d_nameの指す文字列の長さが2未満だと,
配列の先頭要素より前をアクセスしようとすることになって,
未定義動作の領域に踏み込むことになるためです。
#ent->d_name - 2 + strlen(ent->d_name)も先に2が引かれるので未定義動作。
このような場合,私はポインタ演算を好みますが,ポインタだとわからないのであれば,
strcmp(&ent->d_name[strlen(ent->d_name) - 2], ".c") == 0
でも同じことです。ついでに,
char * p = ent->d_name;
としておいて,
strcmp(&p[strlen(p) - 2], ".c") == 0
も同じことになります。
まぁ,やっていることはent->d_nameの最後二文字が.cであるか否かを調べているのですが。
|