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

標準関数
構文
応用

管理人

プライバシーポリシー


書式

#include <string.h>

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

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

説明

コピー先str1の末尾NULL(\0)からコピー元str2の末尾NULLまでを含めてコピーして、コピー先str1の先頭アドレスを返す。
つまり、str1とstr2を合体(append)させて新たなstr1とする。

str1は、合体(append)後でも充分なサイズが必要である。

尚、コピー元str2の長さがlenより小さい場合は、str2のNULLも含めてコピーされる。

サンプル

#include <string.h>

main() {
  char str1[10];

  memset( str1 , 'a' , sizeof( str1 ));/* aで埋める */
  str1[5] = '\0';/* 6番目にNULLを設定 */
  str1[9] = '\0';/* 末尾にNULLを設定 */
  
  /* 現時点でstr1の中身はNULLも視覚化すると */
  /* [aaaaa\0aaa\0]の並びになっている */
  printf( "str1(1)=%s\n" , str1 );/* aaaaa */
  printf( "str1(2)=%s\n\n"
           , &str1[strlen( str1 )+1] );/* aaa */
  
  /* 12がcopyされ、続けてNULLも設定される */
  strncat( str1 , "12" , 2 );
  /* 現時点でstr1の中身はNULLも視覚化すると */
  /* [aaaaa12\0a\0]の並びになっている */
  printf( "str1(1)=%s\n" , str1 ); /* aaaaa12 */
  printf( "str1(2)=%s\n"
               , &str1[strlen( str1 )+1] );/* a */
}

実行結果

str1(1)=aaaaa
str1(2)=aaa

str1(1)=aaaaa12
str1(2)=a

補足

str2の長さがlenより小さい場合について
上記とサンプルを流用して15行目の引数のみを変更しているが、実は結果は同じである。

サンプル(補足)

#include <string.h>

main() {
  char str1[10];

  memset( str1 , 'a' , sizeof( str1 ));/* aで埋める */
  str1[5] = '\0';/* 6番目にNULLを設定 */
  str1[9] = '\0';/* 末尾にNULLを設定 */
  
  /* 現時点でstr1の中身はNULLも視覚化して */
  /* [aaaaa\0aaa\0]の並びになっている */
  printf( "str1(1)=%s\n" , str1 );/* aaaaa */
  printf( "str1(2)=%s\n\n"
                 , &str1[strlen( str1 )+1] );/* aaa */
  
  /* 12\0 3byteまでがcopyされる */
  strncat( str1 , "12" , 4 );
  /* 現時点でstr1の中身はNULLも視覚化して */
  /* [aaaaa12\0a\0]の並びになっている */
  printf( "str1(1)=%s\n" , str1 ); /* aaaaa12 */
  printf( "str1(2)=%s\n"
                 , &str1[strlen( str1 )+1] );/* a */
}

実行結果(補足)

str1(1)=aaaaa
str1(2)=aaa

str1(1)=aaaaa12
str1(2)=a

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