平成21年春『絶対パス変換』のエッセイ

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
コマ大情報科さん  
(No.1)
底本は『C言語の切り札 改訂新版』です。
『平成21年春問9』「与えられたパスを絶対パスに変換するプログラム」問題(ネットでも拾えますのでお手数ですが)内の疑問です。
 底本ではQ.7 難度C(最高)
底本P197 L18 「if(!strcmp(path,".")||!strcmp(path,"./")) { 『pathがカレントディレクトリの場合の処理』}
の書式についてです。
問題中では丁寧に問題文中でstrcmp と strncmp の解説もつけられています。

まだポインタの概念を掴みきっていないのですが、
「path」*がついていないので、アドレスではなくてパス表記自体を参照「../../b/c/」「c/」~
問題は 『それ文字列と "."1文字 と "./"2文字を ルールなく比較してもいいのですか?』
以下31、34行目他では strncmp (a,b,2)と数字を付与しているので、OKです。
この18行目も str【n】cmp(path,"."【,1】~【,2】なら納得できるのですが。

if と ||またと !否定のくみあわせ で 0(一致)がでてきたら反転して1にするのはOKでしょうか。
問題文ままだと、ほぼ全部 不一致 0しかでないと 
… アレ????
自己解決カレントディレクトリは完全一致「.」「./」の二つしかないということかな?
ただ、問題例にはないし冗長だが、「file1.txt」ではなくて「./file1.txt」の場合は?
……って、それが 34行目の処理じゃないか!!なるほど!!
アハハ、ただの恥さらし エッセイ投稿になりましたが、これも参考になれば、と投稿しておきます。お邪魔しました。コマ大ワンワンワン!




2018.01.17 00:18
コマ大情報科さん  
(No.2)
↑ わかりにくい文なので 質問の補足を
「strcmp関数は 完全一致じゃなくて 部分一致 でもヒットするのですか?」
という疑問でした。

でも、やはり 完全一致 のみ (正確には、一致=0をかえしてくれるのは 完全一致のみ)
と自己解決いたしました。
2018.01.17 00:26

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop