先頭へ戻る

strncpy | Programming Place Plus C言語編 標準ライブラリのリファレンス

Programming Place Plus トップページ -- C言語編 -- 標準ライブラリのリファレンス(名前順)

Programming Place Plus トップページ -- C言語編 -- 標準ライブラリのリファレンス(ヘッダ別)

先頭へ戻る

strncpy関数

概要

文字列を指定文字数以下だけコピーする。

ヘッダ

string.h

形式

char* strncpy(char* s1, const char* s2, size_t n);

引数

s1

コピー先の配列。

s2

コピー元の文字列。

n

コピーする最大文字数。

戻り値

s1 を返す。

詳細

s1 へ s2 の内容をヌル文字を含めて、n文字だけコピーする。s1 の末尾へヌル文字を付加する行為は行われない。

注意

s1 が指す配列の大きさが、コピーされる文字数に満たないとバッファオーバーフローとなる。この結果は未定義である。
s1 と s2 の領域が部分的に重なり合っているとき、動作は未定義である。
s2 の先頭から n文字以内にヌル文字が現れない場合、コピー結果にもヌル文字が現れないことに最大級の注意を払わなければならない。

使用例

#include <stdio.h>
#include <string.h>

int main(void)
{
    char s1[10];
    char s2[10];

    puts( strncpy( s1, "abcde", 7 ) );
    puts( strncpy( s2, "abcde", 3 ) );  /* s2 の末尾に '\0' が付かないので危険 */

    return 0;
}

実行結果:

abcde
abcフフフフフフフフフフフフフフフフフabcde

関連

終端文字を無視してコピーを行うために、memcpy関数、あるいは memmove関数を使える。
ワイド文字列版の、wcsncpy関数がある。

解説章


参考リンク


------------------------------------------------------------------------

更新履歴

'2018/4/22 解説中で C95 を(C89 に対して)特別扱いしないように修正。そもそもC言語編は C95ベースなので、余計な説明は省く。

'2018/4/17 全体的に文章を見直し修正。
未定義の動作になることについての明記と、ヌル文字が付加されないケースについての注意喚起を追記。

'2018/1/22 新規作成。


------------------------------------------------------------------------

標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー