<<戻る

2004年08月17日

C89標準ライブラリ

C言語を理解するために、プログラミング言語C第2版 (ISBN4-320-02692-6)を基に作成してみる。

strcpy

#include 

void strcpy_(char *s, char *t)
{
        while ( (*s++ = *t++) != '\0')
                        ;
}

int main(int argc, char *argv[])
{
                char src[12] ="HOGE";
                char dest[12];

                memset(dest, 0, 12);
                strcpy_(dest, src);

                printf("%s\n", dest);
                return 0;
}

 

strncpy, strcmp, strcat

[s-okita@stoc KandR]$ cat str.c
#include 
#include 

void strncpy_(char *s, char *t, int lim);
int strncmp_(char *s, char *t, int lim);
void strncat_(char *s, char *t, int lim);

/* copy t to s. */
void strncpy_(char *s, char *t, int lim)
{
                char *tmp = t;
                while ( (*s++ = *tmp++) != '\0' && tmp - t < lim)
                                ;
}


int strncmp_(char *s, char *t, int lim)
{
                char *sp = s;
                while ( *t++ == *sp++ )
                {
                                printf("sp%p,s%p....%d\n", sp, s, sp - s);
                                if ( sp - s >= lim )
                                                break;
                        if ( *sp == '\0')
                                return 0;
                }

                return *sp - *t;

}

void strncat_(char *s, char *t, int lim)
{
                char *sp = s;
                char *tp = t;
                while (*tp++ != '\0')
                                ;
                while (*sp++ != '\0')
                                ;

                sp--;
                while ( *sp = *t )
                {
                                printf("%d\n", tp - t);
                                if (*t == '\0' || tp - t < lim)
                                                return;
                                sp++;
                                t++;

                }
}

void test1() {
                char src[12]="HELLO";
                char dest[12];

                memset(dest, 0, 12);
                strncpy_(dest, src, 3);

                printf(dest);
}

void test2() {
                                int rs = 0;
                                char src2[12] = "HELLO";
                                char dest2[12] = "HELLO";

                                rs = strncmp_(src2, dest2, 1);
                                printf("rs:%d\n", rs);
}

void test3()
{
                char src3[12]= "HELLO";
                char dest3[12];

                strncat_(dest3, src3, 4);

                printf(dest3);
}
int main(int argc, char *argv[])
{
                test3();
                return 0;
}