FrontPageRoast+>リファレンス>stdsafe.hpp>roast_safe_str関数群

roast_safe_str関数群

roast_safe_str関数群は、文字列バッファ dest に対し、dest_memsize にて指定されたメモリサイズを超えない範囲内で処理を行います。

処理の結果 dest_memsize の範囲を超える場合、それらの文字列は切り捨てられます。また、切り捨てられたかどうかを検知する事はできません。
(唯一、destに格納された文字列の長さ──strlen()の復帰値──が dest_memsize - 1 の値であるかどうかにより、切り捨てられたかもしれない事を検知出来ます。)
切り捨てられたかどうかを検知するには roast_safe_str_~_ex関数群 を使用する必要があります。(※この機能は現時点ではまだ実装されていない)

dest に格納される文字列の終端は必ず '\0' である事が保障されます。このため、dest に格納される('\0'を除く)文字列の最大長は dest_memsize - 1 となります。


C++宣言

roast/std/safe.hpp :

  1. namespace roast
  2. {
  3. char* safe_strcpy( char *dest, const char *src, size_t dest_memsize );
  4. char* safe_strcat( char *dest, const char *src, size_t dest_memsize );
  5. char* safe_strccpy( char *dest, const char *src, char c, size_t dest_memsize );
  6. }

C宣言

roast_bufsafe.h :

  1. char* roast_safe_strcpy( char *dest, const char *src, size_t dest_memsize );
  2. char* roast_safe_strcat( char *dest, const char *src, size_t dest_memsize );
  3. char* roast_safe_strccpy( char *dest, const char *src, char c, size_t dest_memsize );


サポートされた半数

初期版数からサポート。


実装

それぞれの実関数として、n付きの関数を呼び出す。この時指定する引数 n には、バッファサイズ-1の値を指定する。
strn~() 標準関数は最後の文字を必ず '\0' としてくれるとは限らないため、文字列が必ず '\0' で終端するよう、destdest_memsize-1 に対し '\0' を設定しておく。

C++関数の場合の実態はインライン関数、C関数の場合はマクロであるため、高速な呼び出しへと展開されるがその分プログラムサイズは大きくなる。(展開された結果の行数は2~3step程度)