Hatena::Groupcprogramming

Going My C Way このページをアンテナに追加 RSSフィード

2010年10月29日(金)

strncmp()

| 06:08 |  strncmp() - Going My C Way を含むブックマーク はてなブックマーク -  strncmp() - Going My C Way  strncmp() - Going My C Way のブックマークコメント

strncmp() を書いてみます。

manpage 抜粋。

       #include <string.h>

       int strncmp(const char *s1, const char *s2, size_t n);

ソース strncmp.c

#include <stddef.h> /* size_t */

int my_strncmp(const char *s1, const char *s2, size_t n)
{
    while ((*s1 == *s2) && *s1 && (--n > 0)) {
        s1++;
        s2++;
    }

    return (*s1 == *s2) ?  0 :
           (*s1  < *s2) ? -1 :
         /* *s1  > *s2 */  1 ;
}

/*
    ここから下はテスト用の main 関数
 */
#if defined(TEST_MAIN)

#define EXIT_SUCCESS (0)

int printf(const char *format, ...);

#define put_d(d_)   (printf(#d_ " = %d\n", d_))

#include <string.h>
int main(void)
{
    put_d( my_strncmp("hello", "hello", 5) );
    put_d( my_strncmp("hello", "world", 5) );
    put_d( my_strncmp("world", "hello", 5) );
    put_d( my_strncmp(""     , "hello", 5) );
    put_d( my_strncmp("hello", ""     , 5) );
    put_d( my_strncmp(""     , ""     , 5) );
    put_d( my_strncmp("helloa", "hellob", 5) );
    put_d( my_strncmp("helloa", "hellob", 6) );

    return EXIT_SUCCESS;
}
#endif /* defined(TEST_MAIN) */

Makefile

ビルド

$ make strncmp

テスト。

$ ./strncmp 
my_strncmp("hello", "hello", 5) = 0
my_strncmp("hello", "world", 5) = -1
my_strncmp("world", "hello", 5) = 1
my_strncmp("" , "hello", 5) = -1
my_strncmp("hello", "" , 5) = 1
my_strncmp("" , "" , 5) = 0
my_strncmp("helloa", "hellob", 5) = 0
my_strncmp("helloa", "hellob", 6) = -1

OK。