2004年08月17日
C言語を理解するために、プログラミング言語C第2版 (ISBN4-320-02692-6)を基に作成してみる。
strcpy
#includevoid 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; }