Hatena::Groupcprogramming

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

2010年11月02日(火)

strncpy()

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

strncpy() を書いてみます。

manpage 抜粋。

       #include <string.h>

       char *strncpy(char *dest, const char *src, size_t n);

ソース strncpy.c

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

char *my_strncpy(char *dest, const char *src, size_t n)
{
    char *p = dest;

    while (*src && (n > 0)) {
        *p++ = *src++;
        n--;
    }

    while (n-- > 0) {
        *p++ = '\0';
    }

    return dest;
}

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

#define EXIT_SUCCESS (0)

#include <string.h> /* memset() */
#include "testmisc.h"

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

#include <string.h>
int main(void)
{
    char buf[64];

    memset(buf, '@', sizeof(buf));
    my_strncpy(buf, "hello, world", 5);
    dump(buf, 16);

    memset(buf, '@', sizeof(buf));
    my_strncpy(buf, "hello, world", 13);
    dump(buf, 16);

    memset(buf, '@', sizeof(buf));
    my_strncpy(buf, "hello, world", 15);
    dump(buf, 16);

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

Makefile

ビルド

$ make strncpy

テスト。

$ ./strncpy 
     0: 68 65 6c 6c 6f 40 40 40 40 40 40 40 40 40 40 40 : hello@@@@@@@@@@@
     0: 68 65 6c 6c 6f 2c 20 77 6f 72 6c 64 00 40 40 40 : hello, world.@@@
     0: 68 65 6c 6c 6f 2c 20 77 6f 72 6c 64 00 00 00 40 : hello, world...@

OK.