標準関数 memset, memcpy
#include <stdio.h>
#include <string.h>
void main(void) {
char str1[32];
char str2[8];
memset(str2, 'A', sizeof(str2)); // 'A' で str2 を埋める
memcpy(str1, str2, sizeof(str2)); // str2 を str1 へコピー
str1[sizeof(str2)] = 0; // str1 の最後にNULLをセット
printf("%s\n", str1); // str1 を表示する
}
実行結果
AAAAAAAA
memcpy関数 や memset関数 は、文字コードだけでなくバイナリまで扱えます。
それに対して、strcpy関数 や strcmp関数は、文字コードしか扱えません。
使い分けましょう。
memcpy関数を使用するのは、malloc関数で確保したメモリ空間をNULLで初期化するなどです。
標準関数 memcpy と strncpy の動作の違い
#include <stdio.h>
#include <string.h>
int main(void) {
char sdata[] = "abc\0def";
char ddata[256];
int i;
memset(ddata, '\0', sizeof(ddata));
memcpy(ddata, sdata, sizeof(sdata));
for( i = 0 ; i < sizeof(sdata) ; i++ )
printf("%d : %c\n", i, ddata[i]);
memset(ddata, '\0', sizeof(ddata));
strncpy(ddata, sdata, sizeof(sdata));
for( i = 0 ; i < sizeof(sdata) ; i++ )
printf("%d : %c\n", i, ddata[i]);
}
実行結果
0 : a
1 : b
2 : c
3 :
4 : d
5 : e
6 : f
7 :
0 : a
1 : b
2 : c
3 :
4 :
5 :
6 :
7 :
memcpy関数を使用すると途中にNULLが入っていてもコピーされますが、strncmp関数を使用すると4バイト目のNULLでコピーが終了します。