C言語 標準関数 | 応用 | サンプル

標準関数
構文
応用

管理人

プライバシーポリシー


書式

#include <string.h>

char * strncpy( char *str1 , const char *str2
                                   , size_t len );

■戻り値:コピー先str1の先頭アドレスを返す。

説明

コピー先str1へコピー元str2のlen文字をコピーして上書きして、コピー先の先頭アドレスを返す。
(以下のサンプルにおける「NULL(\0)補完」の場合を除いて自動でNULLは設定されないので注意すること)

コピーに際して、コピー先str1は領域溢れが生じない充分なサイズが必要である。

但し、コピー元str2のサイズよりlenの値が大きい場合は、(str2の)不足分をNULLで補完してlen文字をコピーする。

サンプル

#include <string.h>

main() {
  char str1[5];

  memset( str1 , 'a' , sizeof( str1 ));/* aで埋める */
  /* 2byte(="01")がcopyされる(NULL無し) */
  strncpy( str1 , "01" , 2 );

  printf( "str1[0]=%c\n" , str1[0] );/* 0 */
  printf( "str1[1]=%c\n" , str1[1] );/* 1 */
  printf( "str1[2]=%c\n" , str1[2] );/* a */
  printf( "str1[3]=%c\n" , str1[3] );/* a */
  printf( "str1[4]=%c\n\n" , str1[4] );/* a */

  memset( str1 , 'b' , sizeof( str1 ));/* bで埋める */
  /* 4byte(="01\0\0")がcopyされる(NULL(\0)補完) */
  strncpy( str1 , "01" , 4 );

  printf( "str1[0]=%c\n" , str1[0] );/* 0 */
  printf( "str1[1]=%c\n" , str1[1] );/* 1 */
  printf( "str1[2]=0x%02x\n" , str1[2] );/* \0 */
  printf( "str1[3]=0x%02x\n" , str1[3] );/* \0 */
  printf( "str1[4]=%c\n" , str1[4] );/* b */
}

実行結果

str1[0]=0
str1[1]=1
str1[2]=a
str1[3]=a
str1[4]=a

str1[0]=0
str1[1]=1
str1[2]=0x00
str1[3]=0x00
str1[4]=b


Copyright © 2008-2015 http://hitorilife.com All Rights Reserved.