C言語 バッファのコピー(移動) - string.h - [ memmove ]

2008.11.26 Wednesday | by LRESULT


ッファのコピー(移動)をするには、memmove()を使います。

memcpy()と、ほぼ同じ機能ですが、メモリ領域が重なっている場合でも
正しくコピーされるという点が異なります。

ただし環境によっては、メモリ領域が重なっても
  memcpy()で問題なく動く場合があるようです。(VC8で確認)


memmove
書式 void* memmove( void *s1, const void *s2, size_t n )
機能 バッファのコピー(移動)
引数 void *s1 : コピー先となるバッファ
const void *s2 : コピー元となるバッファ
size_t n : コピーするバイト数
戻り値 コピー先バッファ(s1)を返します。

バッファサイズを超えるような、バイト数(n)を指定すると
  メモリ破壊を起こすので注意が必要です。



C言語 バッファを指定した値で設定 - string.h - [ memset ]

2008.11.25 Tuesday | by LRESULT


ッファを指定した値で設定(初期化)するには、memset()を使います。


memset
書式 void* memset( void *s, int c, size_t n )
機能 バッファを指定した値で設定
引数 void *s : 設定対象のバッファ
int c : 設定する値
size_t n : 設定バイト数
戻り値 設定対象のバッファ(s)を返します。

バッファサイズを超えるような、バイト数(n)を指定すると
  メモリ破壊を起こすので注意が必要です。
memset()は、構造体や配列の初期化に使われることが多いです。



C言語 バッファのコピー - string.h - [ memcpy ]

2008.11.24 Monday | by LRESULT


ッファのコピーをするには、memcpy()を使います。

結構メジャーな関数で、なにかと使うことになると思います。
コピーするサイズは気をつけないと、メモリ破壊を起こすので注意が必要です。


memcpy
書式 void* memcpy( void *s1, const void *s2, size_t n )
機能 バッファのコピー
引数 void *s1 : コピー先となるバッファ
const void *s2 : コピー元となるバッファ
size_t n : コピーするバイト数
戻り値 コピー先バッファ(s1)を返します。

strncpy()と似てますが、「¥0」は追加されません。



C言語 バッファ同士のデータを比較 - string.h - [ memcmp ]

2008.11.23 Sunday | by LRESULT


ッファ同士のデータを比較するには、memcmp()を使います。

strncmp()のバッファ版といったところです。
つまり、文字列の比較ではなく、データの比較というわけです。


memcmp
書式 int memcmp( const void *s1, const void *s2, size_t n )
機能 バッファ同士のデータを比較
引数 const void *s1 : 比較するバッファ
const void *s2 : 比較するバッファ
size_t n : 比較するバイト数
戻り値 s1 < s2 : 負の値
s1 = s2 : 0
s1 > s2 : 正の値

大小関係はデータのバイナリ値から判定しているようです。



C言語 バッファ内のデータを検索 - string.h - [ memchr ]

2008.11.22 Saturday | by LRESULT


ッファ内のデータを検索するには、memchr()を使います。

strchr()に似てますが、バッファとして扱う為、「¥0」があっても無視して
バッファ内を検索する辺りに違いがあります。
特に、検索対象が文字列である必要はありません。


memchr
書式 void* memchr( const void *s, int c, size_t n )
機能 バッファ内のデータを検索
引数 const void *s : 検索対象となるバッファ
int c : 検索するデータ
size_t n : 検索バイト数
戻り値 検索データ(c)を最初に発見した位置のポインタを返し、
発見出来なかったときは、NULLを返します。



C言語 エラー番号に応じた文字列の取得 - string.h - [ strerror ]

2008.11.21 Friday | by LRESULT


ラー番号に応じた文字列を取得するには、strerror()を使用します。

エラー番号については、こちら


strerror
書式 char* strerror( int errnum )
機能 エラー番号に応じた文字列の取得
引数 int errnum : エラー番号
戻り値 エラー番号に応じた文字列のポインタを返します。



エラー番号とエラーメッセージの対応表
00 No error
01 Operation not permitted
02 No such file or directory
03 No such process
04 Interrupted function call
05 Input/output error
06 No such device or address
07 Arg list too long
08 Exec format error
09 Bad file descriptor
10 No child processes
11 Resource temporarily unavailable
12 Not enough space
13 Permission denied
14 Bad address
15 Unknown error
16 Resource device
17 File exists
18 Improper link
19 No such device
20 Not a directory
21 Is a directory
22 Invalid argument
23 Too many open files in system
24 Too many open files
25 Inappropriate I/O control operation
26 Unknown error
27 File too large
28 No space left on device
29 Invalid seek
30 Read-only file system
31 Too many links
32 Broken pipe
33 Domain error
34 Result too large
35 Unknown error
36 Resource deadlock avoided
37 Unknown error
38 Filename too long
39 No locks available
40 Function not implemented
41 Directory not empty
42 Illegal byte sequence
43 Unknown error
44 Unknown error
45 Unknown error
46 Unknown error
47 Unknown error
48 Unknown error
49 Unknown error

VC8で確認しています。



C言語 現在のロケールで文字列の変換 - string.h - [ strxfrm ]

2008.11.20 Thursday | by LRESULT


在のロケールで文字列の変換を行うには、strxfrm()を使います。

少しややこしいのですが、strxfrm()で文字列を変換後にstrcmp()で比較した結果と、
変換前の文字列を、strcoll()した結果が同じになるように変換するらしいです。
また、ロケールのLC_COLLATEカテゴリに依存します。


strxfrm
書式 size_t strxfrm( char *s1, const char *s2, size_t n )
機能 現在のロケールで文字列の変換
引数 char *s1 : 変換結果の格納先
const char *s2 : 変換する文字列
size_t n : 変換する文字数
戻り値 変換後の文字列バイト数を返します。


カテゴリ:C言語 string.h | 21:00 | comments(0) | trackbacks(0) | -


C言語 現在のロケールで文字列の比較 - string.h - [ strcoll ]

2008.11.19 Wednesday | by LRESULT


在のロケールで文字列の比較をするには、strcoll()を使用します。

strcmp()との違いは、ロケールのLC_COLLATEの設定を"JPN"にする事によって、
日本語(辞書順)での大小関係を比較出来ることのようです。
また、単純に文字列の一致判定をする場合には、strcmp()で事足ります。


strcoll
書式 char* strcoll( const char *s1, const char *s2 )
機能 現在のロケールで文字列の比較
引数 const char *s1 : 比較する文字列
const char *s2 : 比較する文字列
戻り値 s1 < s2 : 負の値
s1 = s2 : 0
s1 > s2 : 正の値



C言語 文字列を指定した区切り文字群で分解 - string.h - [ strtok ]

2008.11.18 Tuesday | by LRESULT


字列を指定した区切り文字群で分解するには、strtok()を使います。


strtok
書式 char* strtok( char *s1, const char *s2 )
機能 文字列を指定区切り文字群で分解
引数 char *s1 : 分解する文字列
const char *s2 : 区切り文字群
戻り値 区切られた文字列(トークン)があれば、先頭ポインタを返し、
区切られた文字列(トークン)が無ければNULLを返します。

1回目は、分解する文字列(s1)を指定し、トークンを取得します。
  2回目以降は、s1にNULLを指定し、トークンを取得します。
  NULLを返してきた場合に終了します。

分解する文字列がトークンに分解する際に
  区切り文字があった箇所は、「¥0」に置き換えられますので注意が必要です。



C言語 文字列内から文字群を含まない先頭からの長さを取得 - string.h - [ strcspn ]

2008.11.17 Monday | by LRESULT


字列内から文字群を含まない、先頭からの長さを取得するには、strcspn()を使います。

strspn()とは逆で、文字列「CDEFGABABAB」があった場合に、
文字群を「ABC」とすると、先頭の「CDEFG」5文字を取得するということです。


strcspn
書式 size_t strcspn( const char *s1, const char *s2 )
機能 文字列内から文字群を含まない先頭からの長さを取得
引数 const char *s1 : 検索対象の文字列
const char *s2 : 検索する文字群
戻り値 文字群(s2)を含まない、文字列(s1)の先頭からの長さを返します。



| 1/3PAGES | >>