<C言語>文字列と文字列操作関数
今回の記事でわかること
- 文字列の扱い方が分かる
- 文字列捜査に使う標準関数が分かる
- 比較・結合・検索などの基本操作が理解できる
文字列とは
C言語では、文字列は char 型の配列で表します。文字列の末尾には必ず NULL 文字(\0)が必要です
#include <stdio.h>
int main(void) {
char str[] = "Hello, C!";
printf("%s\n", str);
return 0;
}
/*出力結果
Hello, C!
*/
%s は文字列を出力するフォーマット指定子で、str は char 型の配列として扱われる
文字列操作関数
C言語では文字列専用の操作関数が <string.h> に用意されています
文字列の長さを調べる
#include <stdio.h>
#include <string.h>
int main(void) {
char str[] = "Hello, C!";
printf("文字列の長さ: %lu\n", strlen(str));
return 0;
}
/*出力結果
文字列の長さ: 9
*/
strlen は NULL 文字は含まず、実際の文字数だけを返します
文字列のコピー
#include <stdio.h>
#include <string.h>
int main(void) {
char str1[] = "Hello";
char str2[20];
strcpy(str2, str1); // str1 を str2 にコピー
printf("コピー後: %s\n", str2);
return 0;
}
/*出力結果
コピー後: Hello
*/
コピー先の配列は十分な大きさを確保する必要があり、サイズ不足だとバッファオーバーフローの原因になります
文字列の結合
#include <stdio.h>
#include <string.h>
int main(void) {
char str1[20] = "Hello";
char str2[] = ", C!";
strcat(str1, str2); // str1 に str2 を結合
printf("結合後: %s\n", str1);
return 0;
}
/*出力結果
結合後: Hello, C!
*/
接続先の配列も十分な大きさが必要
文字列の比較
#include <stdio.h>
#include <string.h>
int main(void) {
char str1[] = "abc";
char str2[] = "abd";
int result = strcmp(str1, str2); // 比較
if(result == 0) {
printf("同じ文字列\n");
} else if(result < 0) {
printf("str1 < str2\n");
} else {
printf("str1 > str2\n");
}
return 0;
}
/*出力結果
str1 < str2
*/
strcmp は同じなら0,左が小さいなら負の値、左が大きいなら正の値を返します
文字列の検索
#include <stdio.h>
#include <string.h>
int main(void) {
char str[] = "Hello, C!";
char *p = strchr(str, 'C'); // 'C' を探す
if(p != NULL) {
printf("見つかった位置: %ld\n", p - str);
} else {
printf("見つからなかった\n");
}
return 0;
}
/*出力結果
見つかった位置: 7
*/
strchr は最初に見つかった文字のポインタを返します。見つからなかった場合は NULL