Ruby言語では文字列を、コピーしたり、くっつけたり(結合)、
一部分(部分文字列; substring)を取り出したりすることがいとも簡単にできた。
C言語は文字列を操作する場合には、つねに char型配列 で
あることを意識し、コピーするときも結合するときも必要な
char型配列を宣言して行なう必要がある。
実用的なプログラムを作る場合には欠かせない文字列操作関数に 絞っていくつか挙げておこう。以下のいずれを利用する場合にも
#include <string.h>
が必要となることに注意する。
strncpy
文字列をコピーする
strncpy(コピー先, コピー元, 最大文字数)
とすると、最大文字数 を超えない範囲で
コピー元 が示す文字列を コピー先 の
char型配列にコピーする。
例:
char new[100], old[]="Hello, world!";
のような場合、old[] に入っている文字列を
new[] にコピーしたい場合は、
strncpy(new, old, sizeof new);
とする。
strcpy
文字列をコピーする。
strcpy(コピー先, コピー元)
最大文字数の指定がないことの他はstrncpyと同じ。
strcpyは、文字列が壊れているとメモリを破壊するので実
際のプログラミングではstrncpyを使う。ただし、
プログラミングの参考書や試験ではstrcpyを使う
ことが多い。
strncat
文字列の結合を行なう
strncat(文字列1, 文字列2, 最大文字数)
文字列2 を 文字列1 の末尾に追加する。
二つの文字列をつなげたいときに利用する。
例:
char new[100]="Hello", old[]=", world!";
のような場合に old[] の文字列を
new[] に安全に追加するには以下のようにする。
strncat(new, old, sizeof new - strlen(new));
strcat
文字列の結合を行なう。最大文字数を指定しない点を除いて
strncat と同じ。プログラミングの参考書や試験では
strcatを使う場合が多い。ただしchar
型配列のサイズが不足していると、他の変数の文字列を破壊する可能性が
ある。
例: test-strcat.c
#include <stdio.h>
#include <string.h>
int main()
{
char a[] = "a[]を追加するのだ。";
char b[] = "b[] だよ.";
char c[] = "これは c[] です.";
printf("aの内容=[%s]\n", a);
printf("bの内容=[%s]\n", b);
strcat(c, a);
printf("aの内容=[%s]\n", a);
printf("bの内容=[%s]\n", b);
}
strcat を利用する場合には宣言するchar
型配列のサイズに十分気をつける。もちろんstrncatを
利用する方が望ましい。
strncmp
文字列の大小比較を行なう。
strncmp(文字列1, 文字列2, 最大文字数)
として 文字列1 と 文字列2 の大小を
最大文字数 の範囲内で比較する。比較結果はint
型の数値で返る。
返す。
strcmp
文字列の大小比較を行なう。
strcmp(文字列1, 文字列2)
最大文字数の指定をしない他はstrncmpと同じ。
strncasecmp
文字列の大小比較を行なう。
strncasecmp(文字列1, 文字列2, 最大文字数)
として 文字列1 と 文字列2 の大小を
最大文字数 の範囲内で比較する。比較のときには
アルファベットの大文字小文字を区別しない。比較結果はint
型の数値で返る。
strcasecmp
文字列の大小比較を大文字小文字の区別なしで行なう。
strcasecmp(文字列1, 文字列2)
最大文字数の指定をしない他はstrncasecmpと同じ。