文字列のコピー(strncpy)
文字列のコピーには strncpy 関数を使用します。
strncpy 関数は、ソース文字列 の先頭から コピーする文字数 を 対象文字列 にコピーし、対象文字列 を返します。
コピーする文字数 が ソース文字列 の長さ以下の場合、コピー先の文字列に自動的に null 文字が
追加されることはありません。
コピーする文字数 が ソース文字列 の長さより大きい場合、コピー先の文字列が長さ コピーする文字数 になるまで
null 文字が埋め込まれます。
strncpy 関数には、セキュリティ拡張版である strncpy_s 関数が存在します。
構文
char *strncpy( char *strDest, // 対象文字列 const char *strSource, // ソース文字列 size_t count // コピーする文字数 );
必須ヘッダ
<string.h>
文字列を使用した記述例
// string program in C.
#include <stdio.h>
#include <string.h>
int main(int argc, char *args[])
{
char a1[4] = "xxxx";
char a2[4] = "xxxx";
strncpy(a1, "AB", sizeof(a1) - 1);
strncpy(a2, "ABCDEFG", sizeof(a2) - 1);
printf("a1 = %.4s\n", a1);
printf("a2 = %.4s\n", a2);
return 0;
}
-
strncpy 関数を使用して変数「a1」には"AB"から sizeof()演算子にて取得した 4 byte分の
文字列がコピーされます。
"AB"の文字列リテラルでは 4 byte を満たしていない為、残りのbyte数分はnull文字で埋められます。
-
strncpy 関数を使用して変数「a2」には"ABCDEFG"から sizeof()演算子にて取得した 4 byte分の
文字列がコピーされます。
ただし、終端にnull文字が格納されない為、printf()での出力時に、変数で確保しているメモリ以降に格納されている 不定値まで出力されています。
実行結果
a1 = AB
a2 = ABCDフフフフフフフフAB
実際に格納されている内容
a1 = {'A', 'B', '\0', '\0'}
a2 = {'A', 'B', 'C', 'D'}