標準関数 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