C言語 バッファのコピー(移動) - string.h - [ memmove ]
2008.11.26 Wednesday | by LRESULT
バッファのコピー(移動)をするには、memmove()を使います。
memcpy()と、ほぼ同じ機能ですが、メモリ領域が重なっている場合でも
正しくコピーされるという点が異なります。
※ ただし環境によっては、メモリ領域が重なっても
memcpy()で問題なく動く場合があるようです。(VC8で確認)
書式 | 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()を使います。
書式 | 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()を使います。
結構メジャーな関数で、なにかと使うことになると思います。
コピーするサイズは気をつけないと、メモリ破壊を起こすので注意が必要です。
書式 | 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()のバッファ版といったところです。
つまり、文字列の比較ではなく、データの比較というわけです。
書式 | 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」があっても無視して
バッファ内を検索する辺りに違いがあります。
特に、検索対象が文字列である必要はありません。
書式 | 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()を使用します。
※ エラー番号については、こちら。
書式 | 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カテゴリに依存します。
書式 | 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()で事足ります。
書式 | 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()を使います。
書式 | 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文字を取得するということです。
書式 | size_t strcspn( const char *s1, const char *s2 ) |
---|---|
機能 | 文字列内から文字群を含まない先頭からの長さを取得 |
引数 | const char *s1 : 検索対象の文字列 const char *s2 : 検索する文字群 |
戻り値 | 文字群(s2)を含まない、文字列(s1)の先頭からの長さを返します。 |