独学C言語 中級

2024年版 C言語・中級レベル ~標準関数 ctrcpy, strlen~

標準関数 strcpy

char strcpy( char *dest, const char *src );

dest コピー先文字列アドレス

src コピー元文字列アドレス

#include <stdio.h>
#include <string.h>

int main(void) {
    char sstr1[] = "abcde";
    char sstr2[] = "abcde\0fgh";
    char dstr[256];
    int i;

    strcpy( dstr, sstr1);    // sstr1をコピー
    printf(dstr);
    printf("\n");

    strcpy( dstr, sstr2);    // sstr2をコピー 
    printf(dstr);
    printf("\n");

    for( i = 0 ; i < sizeof(sstr2) ; i++ )
        printf("%x,", dstr[i]);    // 16進でdstr表示
    printf("\n");

    memcpy( dstr, sstr2, 10);    // memcpyでsstr2をコピー
    printf(dstr);
    printf("\n");

    for( i = 0 ; i < sizeof(sstr2) ; i++ )
        printf("%x,", dstr[i]);    // 16進でdstr表示
    printf("\n");
}

実行結果

abcde
abcde
61,62,63,64,65,0,0,0,0,0,
abcde
61,62,63,64,65,0,66,67,68,0,

strcpy関数のコピーは、終端文字(NULL)までコピーされます。

memcpy関数は、終端文字は無視されて指定したバイト数分コピーされます。

標準関数 strncpy

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

dest コピー先文字列アドレス

src コピー元文字列アドレス

num コピーする文字数

#include <stdio.h>
#include <string.h>

int main(void) {
    char sstr1[] = "abcde";
    char sstr2[] = "abcde\0fgh";
    char dstr[256];
    int i;

    strncpy( dstr, sstr1, sizeof( sstr1 ));
    printf("%d %s", sizeof(sstr1), dstr);
    printf("\n");

    strncpy( dstr, sstr2, sizeof( sstr2 ));
    printf("%d %s", sizeof(sstr2), dstr);
    printf("\n");

    for( i = 0 ; i < sizeof(sstr2) ; i++ )
        printf("%x,", dstr[i]);
    printf("\n");
}

実行結果

6 abcde
10 abcde
61,62,63,64,65,0,0,0,0,0,

標準関数 strlen

size_t strlen( const char *str );
str   文字列
戻り値 文字数

#include <stdio.h>
#include <string.h>

int main(void) {
    char sstr1[] = "abcde";
    char sstr2[] = "abcde fgh";
    char sstr3[] = "abcde\0fgh";
    int  wint;

    wint = strlen(sstr1);     // sstr1の長さ
    printf("len=%d\n", wint );

    wint = strlen(sstr2);     // sstr2の長さ:Spaceは文字として扱う
    printf("len=%d\n", wint );

    wint = strlen(sstr3);     // sstr2の長さ:終端文字(NULL)までの文字数
    printf("len=%d\n", wint );
}

実行結果

len=5
len=9
len=5

-独学C言語 中級