picox  0.1
Xstring

標準Cライブラリstring.hの拡張機能を提供します [詳解]

Xstring 連携図

関数

static const char * x_btos (bool cond)
 真偽値に対応する"true" or "false"の文字列を返します
 
void x_memblt (void *dst, const void *src, size_t width, size_t height, size_t dstride, size_t sstride)
 srcからdstにメモリの矩形コピーを行います。 [詳解]
 
bool x_memequal (const void *p1, const void *p2, size_t n)
 (memcmp(p1, p2) == 0)と同じです
 
void x_memlrot (void *p, size_t shift, size_t size, size_t n)
 sizeバイトの要素n個からなる配列pの要素を左方向にshift個分回転移動させます。
 
void * x_memmem (const void *p1, size_t n1, const void *p2, size_t n2)
 n1バイトの大きさを持つp1からn2バイトのp2が最初に現れた位置のポインタを返します [詳解]
 
void x_memrandom (void *p, size_t n)
 nバイトの領域を持つpをランダムな値で埋めます
 
void x_memrandom_alpha (void *p, size_t n)
 nバイトの領域を持つpをランダムなアルファベット[a-zA-Z]で埋めます
 
void * x_memrchr (const void *p, int c, size_t n)
 memchr()の逆走査版です [詳解]
 
void x_memreverse (void *p, size_t size, size_t n)
 sizeバイトの要素n個からなる配列pの要素を逆順に並べ替えます。
 
void x_memrrot (void *p, size_t shift, size_t size, size_t n)
 sizeバイトの要素n個からなる配列pの要素を右方向にshift個分回転移動させます。
 
void x_memswap (void *a, void *b, size_t size)
 aとbからsizeバイトを入れ替えます。
 
char * x_stpcpy (char *dst, const char *src)
 srcをdstにコピーし、コピーした文字列の終端のポインタを返します [詳解]
 
char * x_stpncpy (char *dst, const char *src, size_t n)
 長さ制限付きのx_stpcpy()です [詳解]
 
char * x_stpncpy2 (char *dst, const char *src, size_t n)
 0埋め無し版のx_stpncpy()です [詳解]
 
char * x_stprcpy (char *dst, const char *src)
 dstにsrcを逆順でコピーし、コピーした文字列の終端のポインタを返します
 
int x_strcasecmp (const char *s1, const char *s2)
 大文字小文字の違いを無視したstrcmp()です。 [詳解]
 
bool x_strcaseequal (const char *s1, const char *s2)
 大文字小文字の違いを無視したx_strequal()です
 
char * x_strcasepbrk (const char *str, const char *accept)
 大文字小文字の違いを無視したstrpbrk()です。
 
char * x_strcaserpbrk (const char *str, const char *accept)
 大文字小文字の違いを無視したx_strrpbrk()です。
 
char * x_strcasestr (const char *s1, const char *s2)
 大文字小文字の違いを無視したstrstr()です。 [詳解]
 
char * x_strchrnul (const char *s, int c)
 文字列s中にはじめに文字cが現れた位置へのポインタを返します [詳解]
 
size_t x_strcountcaseequal (const char *a, const char *b)
 大文字小文字の違いを無視したx_strcountequal()です。
 
size_t x_strcountequal (const char *a, const char *b)
 a,bを比較し、一致するバイト数を返します
 
char * x_strdup (const char *str)
 文字列の複製をヒープから生成して返します [詳解]
 
char * x_strdup2 (const char *str, XMallocFunc malloc_func)
 指定のメモリ確保関数を使用して複製した文字列を返します [詳解]
 
bool x_strequal (const char *s1, const char *s2)
 文字列s1とs2が一致するかどうかを返します。 [詳解]
 
size_t x_strlcat (char *dst, const char *src, size_t dsize)
 srcから最大でdsize - strlen(dst) - 1バイトの文字列をdstに連結します [詳解]
 
size_t x_strlcpy (char *dst, const char *src, size_t n)
 srcから最大でn - 1バイトをdstにコピーします [詳解]
 
char * x_strlstrip (char *str, const char *space)
 文字列の前からspaceに含まれる文字列を取り除いた結果を返します。 [詳解]
 
int x_strncasecmp (const char *s1, const char *s2, size_t n)
 大文字小文字の違いを無視したstrncmp()です。 [詳解]
 
char * x_strncasestr (const char *s1, const char *s2, size_t n)
 大文字小文字の違いを無視したx_strnstr()です [詳解]
 
char * x_strncpy2 (char *dst, const char *src, size_t n)
 0埋め無し版のx_strncpy()です [詳解]
 
char * x_strndup (const char *str, size_t n)
 複製する最大バイト数を指定できるstrdup()です [詳解]
 
char * x_strndup2 (const char *str, size_t n, XMallocFunc malloc_func)
 メモリ確保関数と最大バイト数を指定して複製した文字列を返します [詳解]
 
size_t x_strnlen (const char *s, size_t n)
 長さ指定付きのstrlen()です
 
char * x_strnstr (const char *s1, const char *s2, size_t n)
 長さ制限付きのstrstr()です [詳解]
 
char * x_strreplace (char *dst, size_t size, size_t len, size_t dn, const char *src, size_t sn)
 sizeバイトの領域を持つ長さlenのdstの先頭からdnバイトをsnバイトのsrcで上書きします [詳解]
 
char * x_strreverse (char *str)
 文字列を逆転させた結果を返します。 [詳解]
 
char * x_strrpbrk (const char *str, const char *accept)
 strpbrk()の逆走査版です。
 
char * x_strrstrip (char *str, const char *space)
 文字列の後ろからspaceに含まれる文字列を取り除いた結果を返します。 [詳解]
 
char * x_strskipchr (const char *s, int c)
 文字列sの先頭にcが続く間読み飛ばし、そのポインタを返します
 
char * x_strstrip (char *str, const char *space)
 文字列の前後からspaceに含まれる文字列を取り除いた結果を返します。 [詳解]
 
bool x_strtobool (const char *str, bool def, bool *ok)
 文字列をboolに変換して返します。 [詳解]
 
double x_strtodouble (const char *str, double def, bool *ok)
 文字列をdoubleに変換して返します。 [詳解]
 
float x_strtofloat (const char *str, float def, bool *ok)
 文字列をfloatに変換して返します。 [詳解]
 
int32_t x_strtoint32 (const char *str, int32_t def, bool *ok)
 文字列をint32_tに変換して返します。 [詳解]
 
char * x_strtolower (char *str)
 strに含まれるアルファベットを全て小文字に変換して返します [詳解]
 
XOpenMode x_strtomode (const char *modestr)
 "r", "r+"等のfopen()で使用するモード指定文字列をXOpenModeに変換して返します
 
uint32_t x_strtouint32 (const char *str, uint32_t def, bool *ok)
 文字列をuint32_tに変換して返します。 [詳解]
 
char * x_strtoupper (char *str)
 strに含まれるアルファベットを全て大文字に変換して返します [詳解]
 

詳解

標準Cライブラリstring.hの拡張機能を提供します

POSIX標準や、glibc, BSD libcでは標準のCライブラリ関数を補完する多数の拡張関 数が用意されています。

ここではそれら拡張と互換機能をもつものと、picox独自の拡張を提供しています。

関数詳解

void x_memblt ( void *  dst,
const void *  src,
size_t  width,
size_t  height,
size_t  dstride,
size_t  sstride 
)

srcからdstにメモリの矩形コピーを行います。

引数
dst転送先
src転送元
width転送幅
height転送高さ
dstride転送先の次のラインまでの幅
sstride転送元の次のラインまでの幅
注意
srcとdstの領域は重なっていないことを前提とします。
void* x_memmem ( const void *  p1,
size_t  n1,
const void *  p2,
size_t  n2 
)

n1バイトの大きさを持つp1からn2バイトのp2が最初に現れた位置のポインタを返します

void* x_memrchr ( const void *  p,
int  c,
size_t  n 
)
char* x_stpcpy ( char *  dst,
const char *  src 
)

srcをdstにコピーし、コピーした文字列の終端のポインタを返します

コピーした文字列の後ろに続けて処理をしたい時に、strcpy()よりもこちらを使用す ると処理に無駄がありません。

char* x_stpncpy ( char *  dst,
const char *  src,
size_t  n 
)
char* x_stpncpy2 ( char *  dst,
const char *  src,
size_t  n 
)

0埋め無し版のx_stpncpy()です

stpncpy()はsrcのバイト数がnより小さい場合、dstの残りを全て'\0'で埋めるという 謎の仕様がありますが、こちらはコピー後のdstの末尾にだけ'\0'をセットします。

int x_strcasecmp ( const char *  s1,
const char *  s2 
)

大文字小文字の違いを無視したstrcmp()です。

char* x_strcasestr ( const char *  s1,
const char *  s2 
)

大文字小文字の違いを無視したstrstr()です。

char* x_strchrnul ( const char *  s,
int  c 
)

文字列s中にはじめに文字cが現れた位置へのポインタを返します

strchr()は文字が見つからなかった時にNULLを返しますが、この関数はsの末尾を返 します。

char* x_strdup ( const char *  str)

文字列の複製をヒープから生成して返します

不要になった文字列はx_free()でメモリを解放してください。

char* x_strdup2 ( const char *  str,
XMallocFunc  malloc_func 
)

指定のメモリ確保関数を使用して複製した文字列を返します

不要になった文字列はmalloc_func()に対応するメモリ解放関数でメモリを解放して ください。

bool x_strequal ( const char *  s1,
const char *  s2 
)

文字列s1とs2が一致するかどうかを返します。

(strcmp(s1, s2) == 0)と同じです。

size_t x_strlcat ( char *  dst,
const char *  src,
size_t  dsize 
)

srcから最大でdsize - strlen(dst) - 1バイトの文字列をdstに連結します

x_strlcpy()と同じく、BSD拡張の移植です。strncat()との違いがわかりづらいです が、以下リンク先にstrlcpy()の振る舞いについての記述があります。

要点は以下の通りです。

  • 戻り値はstrlen(src) + min(dsize, strlen(dst))
  • strncpy()はsrcから何バイトをコピーするかを指定する。strlcpy()はdstの領域の サイズを指定する
  • retval >= dsizeの時はデータが切り詰められたことを意味する
size_t x_strlcpy ( char *  dst,
const char *  src,
size_t  n 
)

srcから最大でn - 1バイトをdstにコピーします

最大サイズを指定する標準の文字列コピー関数strncpy()は、最大サイズを超えた場 合にNULL終端されないという扱いにくい仕様があります。この問題に対処するために 、BSD系には非標準拡張としてstrlcpy()という関数が用意されました。

char* x_strlstrip ( char *  str,
const char *  space 
)

文字列の前からspaceに含まれる文字列を取り除いた結果を返します。

  • str自身が破壊されることに注意してください。
  • space == NULLの場合はisspace()が使用されます。
int x_strncasecmp ( const char *  s1,
const char *  s2,
size_t  n 
)

大文字小文字の違いを無視したstrncmp()です。

char* x_strncasestr ( const char *  s1,
const char *  s2,
size_t  n 
)

大文字小文字の違いを無視したx_strnstr()です

char* x_strncpy2 ( char *  dst,
const char *  src,
size_t  n 
)

0埋め無し版のx_strncpy()です

strncpy()はsrcのバイト数がnより小さい場合、dstの残りを全て'\0'で埋めるという 謎の仕様がありますが、こちらはコピー後のdstの末尾にだけ'\0'をセットします。 strncpy()の謎の仕様にも何か意味があるのだと思うので、別の関数として用意しま した。

char* x_strndup ( const char *  str,
size_t  n 
)

複製する最大バイト数を指定できるstrdup()です

char* x_strndup2 ( const char *  str,
size_t  n,
XMallocFunc  malloc_func 
)

メモリ確保関数と最大バイト数を指定して複製した文字列を返します

不要になった文字列はmalloc_func()に対応するメモリ解放関数でメモリを解放して ください。

char* x_strnstr ( const char *  s1,
const char *  s2,
size_t  n 
)
char* x_strreplace ( char *  dst,
size_t  size,
size_t  len,
size_t  dn,
const char *  src,
size_t  sn 
)

sizeバイトの領域を持つ長さlenのdstの先頭からdnバイトをsnバイトのsrcで上書きします

振る舞いがわかりづらいと思うので、3パターンの例を示します。

  • dn == sn (dn = sn = 3, dst="ABCDEF", src="GHI" result => "GHIDEF")
  • dn > sn (dn = 3 sn = 2, dst="ABCDEF", src="GH" result => "GHDEF")
  • dn < sn (dn = 2 sn = 3, dst="ABCDEF", src="GHI" result => "GHICDEF)

dn < snで、sizeが足りずに、領域をずらせなかった場合はNULLを返します。 それ以外の場合はdstを返します。

char* x_strreverse ( char *  str)

文字列を逆転させた結果を返します。

str自身が破壊されることに注意してください。

char* x_strrstrip ( char *  str,
const char *  space 
)

文字列の後ろからspaceに含まれる文字列を取り除いた結果を返します。

  • str自身が破壊されることに注意してください。
  • space == NULLの場合はisspace()が使用されます。
char* x_strstrip ( char *  str,
const char *  space 
)

文字列の前後からspaceに含まれる文字列を取り除いた結果を返します。

  • str自身が破壊されることに注意してください。
  • space == NULLの場合はisspace()が使用されます。
bool x_strtobool ( const char *  str,
bool  def,
bool *  ok 
)

文字列をboolに変換して返します。

大文字小文字の違いは無視し、("y", "yes", "true", "1")のいづれかであればtrue。 ("n", "no", "false", "0")のいづれかであればfalseと解釈します。

double x_strtodouble ( const char *  str,
double  def,
bool *  ok 
)

文字列をdoubleに変換して返します。

strtod()の結果を返します。

float x_strtofloat ( const char *  str,
float  def,
bool *  ok 
)

文字列をfloatに変換して返します。

c99のstrtof()が使用できない場合はstrtod()の結果を返します。

int32_t x_strtoint32 ( const char *  str,
int32_t  def,
bool *  ok 
)

文字列をint32_tに変換して返します。

  • 文字列先頭の任意の数の空白(std::isspace())は無視されます。
  • +-の符号は数字の直前のみ許可されます。
  • 数字直前の"0[xX]"は16進数に、"0[bB]"は2進数に解釈されます。
  • 16進数、2進数解釈時に+-符号がついていた場合は変換失敗とします。
  • okにNULLが渡されることは許容します。
引数
str変換対象の文字列
def変換に失敗した場合に返すデフォルト値
ok変換に成功したかどうか
char* x_strtolower ( char *  str)

strに含まれるアルファベットを全て小文字に変換して返します

  • str自身が破壊されることに注意してください。
uint32_t x_strtouint32 ( const char *  str,
uint32_t  def,
bool *  ok 
)

文字列をuint32_tに変換して返します。

  • -の符号がついていた場合は常時変換失敗となります。
  • その他の条件はx_strtoint32()を参照してください。
char* x_strtoupper ( char *  str)

strに含まれるアルファベットを全て大文字に変換して返します

  • str自身が破壊されることに注意してください。