- ベストアンサー
春期の基本情報技術者試験の問題について
基本情報試験の勉強の為に過去門を解いていたのですが 自分には分からない記述があったので質問しました 下記のプログラムの while(bp > base && *--bp != '/'); とは一体どのような処理をしているのか教えてください C言語は独学で勉強したのですがこのようなwhile文の 使用方法はどこにものっていなかったので・・・ よろしくお願いします。 問題は平成21年春期の基本情報技術者試験の 午後の問9です。 #include <string.h> void convert(const char*, const char*, char*); void convert(const char *path, const char *base, char *result){ const char *pp, *bp; char *rp; int length; /* pathが絶対パス表記の場合 */ if(*path == '/'){ ; return; } /* pathがカレントディレクトリの場合 */ if(!strcmp(path, ".") || !strcmp(path, "./")){ ; return; } length = strlen(base); bp = base + length; /* bpは文字列baseの終端を指す。*/ if(*(bp - 1) == '/') --bp; /* pathの先頭部にある".."又は"../"を解析することで, baseのパス表記のうち,どこまでresultと共通になるかを調べる。*/ for(pp = path; *pp != '\0' && *pp == '.';){ if(!strncmp(pp, "../", 3)){ pp += 3; while(bp > base && *--bp != '/'); }else if(!strncmp(pp, "./", 2)){ pp += 2; }else if(!strncmp(pp, "..\0", 3)){ pp += 2; while(bp > base && *--bp != '/'); }else{ break; } } /* baseのパス表記と共通な部分をresultに複写する。*/ length = ; strncpy(result, base, length); rp = ; *rp++ = '/'; /* pathの文字列のうち,先頭部分の"./"や".."を除いた残りの 部分(ppが指す文字列)を,resultの文字列に追加する。 */ strcpy(rp, pp); return; }
- みんなの回答 (2)
- 専門家の回答
お礼
回答ありがとうございます。 この場合while文の条件式の中でbpの値を 減算しているってことですよね?