低レイヤの文字列操作 このエントリをはてなブックマークに>追加

ちょっとC書いてて、あるファイルがWindowsのスクリーンセーバーかどうか拡張子(.scr)で判別するロジックで、拡張子に大文字小文字がことがあることが判明したあと、ものすごくロジック書くのが面倒くさくなってきた俺はイラっときて次のように書いた。

    char *p = filename + strlen(filename);
    char lc = 'a' - 'A';
    if((*--p|lc) == 'r' && (*--p|lc) == 'c' && 
       (*--p|lc) == 's' &&  *--p     == '.'){
        // みつかったよ!
    }

Perlに限らずLL書いてる人ってこういう発想はさすがに出てこないんじゃないだろか。こういういじり方してると、最低限この程度のCは書けるようにしておくべきなんじゃないかなーとは思う。

たとえ世の中からポインタが消え去ったとしてもだ。

ちなみにこの技、基本的にASCIIにしか通用しません。低レイヤの人はよくその辺突っ込んでくるので念のため。

(*)あと、このプログラム、厳密にはif(len < 5) return false;みたいの噛ませないと危険です。

1 件のコメント - “低レイヤの文字列操作”

  1. abercrombie paris のコメント

    [spam trap]ここは編集しないでください。コメントは下のボックスにお願いします(Please leave here as is. To comment, use textarea below.)

コメントをどうぞ。

使用できる XHTML タグ : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>