文字列のコピー(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;
}
  1. strncpy 関数を使用して変数「a1」には"AB"から sizeof()演算子にて取得した 4 byte分の 文字列がコピーされます。
    "AB"の文字列リテラルでは 4 byte を満たしていない為、残りのbyte数分はnull文字で埋められます。
  2. strncpy 関数を使用して変数「a2」には"ABCDEFG"から sizeof()演算子にて取得した 4 byte分の 文字列がコピーされます。
    ただし、終端にnull文字が格納されない為、printf()での出力時に、変数で確保しているメモリ以降に格納されている 不定値まで出力されています。

実行結果

a1 = AB
a2 = ABCDフフフフフフフフAB

実際に格納されている内容
a1 = {'A', 'B', '\0', '\0'}
a2 = {'A', 'B', 'C', 'D'}



Last updated:2018/08/16
Author:efn

';