ファイルを選択させ、拡張子によって処理を振り分ける、というようなことをやりたいのですが、うまくいきません。このコードはどこがおかしいのか、どなたか教えてください。
char CheckFileType(char *FileName)
{
char *s;
s=PathFindExtension(FileName);
if(s == ".html"){
//拡張子がhtmlのときの処理
}
else{
違うときの処理
}
}
C の文字列について勉強しなおしてください。
C では、文字列の同一性は == では比較できません。
あれ? 違いましたか?
現在の s にどんな値が設定されているかを確認して
if ( s == ".html" )
の判定処理を考えてみてください。
ちなみに、".html"は文字列".html"の示す先頭アドレスを指します。
> ちなみに、".html"は文字列".html"の示す先頭アドレスを指します。
ワンクッション置いて
const char * html = ".html";
if( s == html ) {
と書き直してみるとわかりやすいかも。
文字列の同一性はどのようにして比較すればよいのですか?
折角ネット使えるのですから検索してみましょう。
> 文字列の同一性はどのようにして比較すればよいのですか?
const char* html = ".html";
if ( ( *s == *html ) &&
( *( s + 1 ) == *( html + 1 ) ) &&
( *( s + 2 ) == *( html + 2 ) ) &&
( *( s + 3 ) == *( html + 3 ) ) &&
( *( s + 4 ) == *( html + 4 )) )
{
// 拡張子がhtmlのときの処理
ぐらいの返信を期待したのは私だけでしょうか?w
strcmpすぐ使っちゃうとあいまいな知識になってしまうような気がします。
皆さん、ありがとうござしました。
結局、「ラク」だったので、strcmpを使うことにしました。
ふっとわいた、strcmpはどのような仕組みだろうという疑問も、Blueさんの説明で理解できました。
> ふっとわいた、strcmpはどのような仕組みだろうという疑問も、Blueさんの説明で理解できました。
ホントですか?
strcmp()に相当する関数かけますか?
いや・・。配列の個数を取得する方法がわかりません。
ヒント:C の文字列は最後に必ず何かがあるはずです。
あ、こんな感じですか?
int (char *string[], char *cmp)
{
int x;
for(x =0; string[x] == NULL; ++x){
if( *(string[x]) == *(cmp[x]))
}
}
それ、コンパイルできません。
strcmp()関数のプロトタイプは以下のとおり。
int strcmp(const char *, const char *);
書き方はいくつかあるでしょうが、
int my_strcmp(const char *a, const char *b)
{
while(*a != '\0' && *b != '\0' && *a == *b){
++a, ++b;
}
if(*a == *b){
return 0;
}else if(*a > *b){
return 1;
}else{
return -1;
}
}
とか。
最後のところは自分だったら3項演算子で次のように書きますが。
return (*a < *b)? -1 : (*a != *b);
なるほど。
皆さん、もう「解決」のチェックをつけてしまったのにもかかわらず、ありがとうございました。
ツイート | ![]() |