Linux講座にようこそ。このページは「C言語プログラミング入門 - 第14章.ライブラリ関数 - 文字列処理ライブラリ」です。
strlen関数はヌル文字を含まない文字列の長さ(文字数)を取得します。
形式 | #include <string.h> size_t strlen(const char *str); |
---|---|
返り値 | 文字列の長さを返します。文字列の最後のヌル文字を含みます。 |
引数 |
|
使用法、 他 |
返り値の型はsize_tになっていますが、これは長さを表すための型名でヘッダファイルに定義してあります。通常はunsigned intですので整数値として取り扱います。 |
入力した文字列の長さ(文字数)を表示します。
$ ./ex14_2_1.prg メッセージを入力してください ==> Hello World. 長さは12文字です。 再度入力しますか(y/n) ==> y メッセージを入力してください ==> Bye Bye. 長さは8文字です。 再度入力しますか(y/n) ==> n $ $ ./ex14_2_1.prg メッセージを入力してください ==> こんにちは。 長さは18文字です。 ← 日本語文字列の場合は、正しい文字数ではありません 再度入力しますか(y/n) ==> n $
strcmp関数は2つの文字列を比較し、結果を返り値で返します。
文字列の比較ですのでヌル文字が現れるまで1文字ずつ比較します。長さが異なる場合はヌル文字が現れた時点で比較を終了します。
形式 | #include <string.h> int strcmp(const char *str1, const char *str2); |
---|---|
返り値 | 比較結果を次のような値で返します。
|
引数 |
|
strncmp関数は2つの文字列を比較し、結果を返り値で返します。strcmp関数との相違は第3引数で比較する文字数を指定できることです。
形式 | #include <string.h> int strncmp(const char *s1, const char *s2, size_t n); |
---|---|
返り値 | strcmp関数と同じです。 |
引数 |
|
memcmp関数は2つのメモリ領域を比較し、結果を返り値で返します。比較する領域は文字列でなくても構いません。
形式 | #include <string.h> int memcmp(const void *mem1, const void *mem2, size_t n); |
---|---|
返り値 | strcmp関数と同じです。 |
引数 |
|
文字列を2つ入力してそれが等しいか否かを表示します。
$ ./ex14_2_2.prg パスワードを入力してください ==> hogehogepass 再度同じパスワードを入力してください ==> hogehogepass OKです。 $ $ ./ex14_2_2.prg パスワードを入力してください ==> hogehogepass 再度同じパスワードを入力してください ==> HOGEHOGEPASS NGです。パスワードが異なります。 $
strcpy関数は終端のヌル文字を含めて文字列をコピーします。使用する場合は次の点に注意してください。
形式 | #include <string.h> char *strcpy(char *dest, const char *src); |
---|---|
返り値 | コピー先の文字列destへのポインタを返します。 |
引数 |
|
strncpy関数は終端のヌル文字を含めて文字列をコピーします。strcpy関数との相違は第3引数でコピーする文字数を指定できることです。使用上の注意点もstrcpy関数と同じですが、さらに次の点にも注意してください。
形式 | #include <string.h> char *strncpy(char *dest, const char *src, size_t n); |
---|---|
返り値 | strcpy関数と同じです。 |
引数 |
|
memcpy関数はメモリ領域を第3引数で指定したバイト数分コピーします。コピー元とコピー先が重なっている場合はmemmove関数を使用してください。
形式 | #include <string.h> void *memcpy(void *dest, const void *src, size_t n); |
---|---|
返り値 | コピー先の領域destへのポインタを返します。 |
引数 |
|
任意の数のメッセージを入力して、入力し終わったら番号を付けて表示します。メッセージの入力は「end」が入力されるか、10個入力されるまで続きます。なお、malloc関数はメモリ領域を動的に確保する関数で、free関数は確保した領域を解放する関数です。これらについては後ほど説明します。
$ ./ex14_2_3.prg メッセージを入力してください ==> Hi. メッセージを入力してください ==> Hello! メッセージを入力してください ==> Bye. メッセージを入力してください ==> Bye bye. メッセージを入力してください ==> end 入力したメッセージに番号を付加して表示します。 001 : Hi. 002 : Hello! 003 : Bye. 004 : Bye bye. $