1. 標準ライブラリ関数とは
コンパイラメーカがよく使う機能をオブジェクトライブラリとして提供してくれるものを「標準ライブラリ関数」と言います。 入出力、文字列操作、文字操作、数学処理など機能別に多くのライブラリ関数が存在します。
以下にごく基本的でよく使われるライブラリ関数についてまとめます。尚、入出力関数については、第5章と第8章をご参照下さい。
2. 代表的な文字列操作関数
文字列を処理するための関数です。
文字列のコピー、連結、比較、長さの取得などを行います。#include <string.h>
が必要です。「#include」については「18-2」 を参照してください。
関数 | 説明 | 使用例 |
---|---|---|
strcpy |
文字列a に文字列b をコピーする。 strcpy(a, b); |
char a[10], b[10]; strcpy(a, "some"); strcpy(b, "day"); strcpy(a, b); ※ ‘\0’ もコピーするので文字列aは |
strcat |
文字列a のうしろに文字列b を連結する。 strcat(a, b); |
char a[10] = "some"; char b[10] = "day"; strcat(a, b); |
strlen |
文字列a の長さを取得。’\0’は長さに含めない。 strlen(a); |
size_t len; char a[] = "today"; len = strlen(a); printf("長さ = %zu\n", len);
※ strlenの返却値型はsize_t型 |
strcmp |
文字列a と文字列b を比較する。 strcmp(a, b); a > b で正、a < b で負、a = bで 0 を返す。 大小関係は一般に文字コード順による。 |
char a[128], b[128]; scanf("%s", a); scanf("%s", b); if (strcmp(a, b) == 0) { printf("等しい文字列\n"); } else { printf("異なる文字列\n"); } |
strncpy | strncpy(a, b, n); 文字列a に文字列b の先頭 n文字をコピーする。 |
|
strncat | strncat(a, b, n); 文字列a のうしろに文字列b の先頭 n文字を連結する。 |
|
strncmp | strncmp(a, b, n); 先頭 n文字だけ文字列a と文字列b を比較する。 |
〇 演習問題
問1
次のフローチャートに基づいてプログラムを作成しなさい。


【実行結果例】
文字列 a = abcde
文字列 b = vwxyz
文字 a は b より小
文字列 a = abcdevwxyz
文字列 a の長さ = 10
問2
文字列 A に入力された文字列を、100文字丁度になるまで、文字列 B に連結しなさい。
【実行結果例】
文字列を入力してください > ABCDEFGHI
str = ABCDEFGHI
文字列を入力してください > abcdefghi
str = ABCDEFGHIabcdefghi
文字列を入力してください > 12345
str = ABCDEFGHIabcdefghi12
文字列の長さ = 20
※ 水色文字はキーボードからの入力
解答例
// 問1
#include <stdio.h>
#include <string.h>
int main(void)
{
char a[20], b[20];
strcpy(a, "abcde");
strcpy(b, "vwxyz");
printf("文字列a = %s\n文字列b = %s\n", a, b);
if (strcmp(a, b) == 0 ) {
printf("文字a,bは等しい\n");
}
else if (strcmp( a, b ) > 0) {
printf("文字aはbより大\n");
}
else {
printf("文字aはbより小\n");
}
strcat(a, b);
size_t len = strlen(a);
printf("文字列a = %s\n", a);
printf("文字列aの長さ = %zu\n", len);
return 0;
}
// 問2
#include <stdio.h>
#include <string.h>
#define LEN 20 //(注)#defineについては第18章を参照してください
int main(void)
{
char str_a[LEN + 1] = ""; // 配列を'\0'で埋める
char str_b[LEN + 1] = "";
while(strlen(str_b) < LEN) {
printf( "文字列を入力してください > " );
scanf("%20s", str_a);
strncat(str_b, str_a, LEN - strlen(str_b));
printf("str = %s\n", str_b);
}
printf("文字列の長さ = %zu\n", strlen(str_b));
return 0;
}
コメント