名前空間
変種
操作

wcsncat, wcsncat_s

From cppreference.com
< c‎ | string‎ | wide
 
 
 
 
ヘッダー <wchar.h> で定義
(1)
wchar_t *wcsncat( wchar_t *dest, const wchar_t *src, size_t count );
(C95 以降)
(C99まで)
wchar_t *wcsncat( wchar_t *restrict dest,
                  const wchar_t *restrict src, size_t count );
(C99以降)
errno_t wcsncat_s( wchar_t *restrict dest, rsize_t destsz,
                   const wchar_t *restrict src, rsize_t count );
(2) (C11 以降)
1) `dest` が指す文字列の末尾に、`src` が指すワイド文字列から最大 `count` 個のワイド文字を追加します。ヌル終端文字がコピーされると停止します。`dest` の末尾にあるヌル終端文字は `src[0]` に置き換えられます。ヌル終端文字は常に最後に追加されます(そのため、この関数が書き込むワイド文字の最大数は `count + 1` です)。
`str` と `dest` の両方の内容、および終端のヌルワイド文字を格納するのに十分な大きさがない場合、動作は未定義です。
文字列が重複する場合、動作は未定義です。
2) (1) と同じですが、この関数は宛先配列の残りの部分(最後に書き込まれたワイド文字から `destsz` まで)を破壊する可能性があり、以下のエラーが実行時に検出され、現在インストールされている制約ハンドラ関数が呼び出されます。
  • `src` または `dest` がヌルポインタである場合
  • `destsz` または `count` がゼロであるか、または `RSIZE_MAX / sizeof(wchar_t)` より大きい場合
  • `dest` の最初の `destsz` 個のワイド文字にヌルワイド文字がない場合
  • 切り捨てが発生する場合: `count` または `src` の長さのうち、いずれか小さい方が、`dest` のヌル終端文字と `destsz` の間の利用可能なスペースを超える場合。
  • ソース文字列と宛先文字列の間に重複が発生する場合
すべての境界チェック関数と同様に、`wcsncat_s` は、実装によって `__STDC_LIB_EXT1__` が定義され、ユーザーが `` をインクルードする前に `__STDC_WANT_LIB_EXT1__` を整数定数 `1` に定義した場合にのみ利用可能であることが保証されます。

目次

[編集] パラメータ

dest - 追加するヌル終端ワイド文字列へのポインタ
src - コピー元のヌル終端ワイド文字列へのポインタ
count - コピーする最大ワイド文字数
destsz - 宛先バッファのサイズ

[編集] 戻り値

1) `dest` のコピーを返します。
2) 成功した場合はゼロを返し、エラーが発生した場合はゼロ以外を返します。また、エラーが発生した場合は、`dest[0]` に `L'\0'` を書き込みます(`dest` がヌルポインタであるか、`destsz` がゼロであるか、または `RSIZE_MAX / sizeof(wchar_t)` より大きい場合を除く)。

[編集] 注釈

宛先バッファに収まるように切り捨てることはセキュリティリスクであり、`wcsncat_s` の実行時制約違反となりますが、`count` を宛先配列のサイズから1を引いた値に指定することで、切り捨て動作を得ることができます。これにより、最初の `count` 個のワイド文字がコピーされ、ヌル終端文字が常に付加されます: `wcsncat_s(dst, sizeof dst / sizeof *dst, src, (sizeof dst / sizeof *dst) - wcsnlen_s(dst, sizeof dst / sizeof *dst) - 1);`

[編集]

#include <wchar.h> 
#include <stdio.h>
#include <locale.h>
 
int main(void) 
{
    wchar_t str[50] = L"Земля, прощай.";
    wcsncat(str, L" ", 1);
    wcsncat(str, L"В добрый путь.", 8); // only append the first 8 wide chars
    setlocale(LC_ALL, "en_US.utf8");
    printf("%ls", str);
}

実行結果の例

Земля, прощай. В добрый

[編集] 参照

  • C17標準 (ISO/IEC 9899:2018)
  • 7.29.4.3.2 wcsncat 関数 (p: 315)
  • K.3.9.2.2.2 wcsncat_s 関数 (p: 466-467)
  • C11標準 (ISO/IEC 9899:2011)
  • 7.29.4.3.2 wcsncat 関数 (p: 432-433)
  • K.3.9.2.2.2 wcsncat_s 関数 (p: 643-644)
  • C99標準 (ISO/IEC 9899:1999)
  • 7.24.4.3.2 wcsncat 関数 (p: 378-379)

[編集] 関連項目

(C95)(C11)
あるワイド文字列のコピーを別のワイド文字列に追加する
(関数) [編集]
2つの文字列の指定された文字数を連結する
(関数) [編集]
(C95)(C11)
あるワイド文字列を別のワイド文字列にコピーする
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)