C言語におけるその他の文字列操作関数の解説

strstr関数

strstr関数は、ある文字列内に別の文字列が含まれるかどうかを判定し、その位置を返すために使用されます。

関数名 機能 ヘッダ
strstr 文字列str1内でstr2を検索 #include <string.h>

戻り値は、str2がstr1内で最初に現れる位置を指すポインタです。見つからない場合はNULLを返します。

カスタム実装例


#include <stdio.h>
#include <assert.h>

const char* my_strstr(const char* mainStr, const char* subStr) {
    const char* start = mainStr;
    const char* ptrMain = mainStr;
    const char* ptrSub = subStr;

    while (*ptrSub++) {
        // サブ文字列の長さを確認
    }

    while (*start) {
        ptrMain = start;
        ptrSub = subStr;

        while (*ptrSub && *ptrMain && *ptrMain == *ptrSub) {
            ptrMain++;
            ptrSub++;
        }

        if (!*ptrSub) {
            return start;
        }
        start++;
    }

    return NULL;
}

strtok関数

strtok関数は、指定された区切り文字を使用して文字列を分割するために使用されます。

関数名 機能 ヘッダ
strtok 指定された区切り文字で文字列を分割 #include <string.h>

この関数は、文字列を分割するたびに内部的に状態を保持するため、複数回呼び出すことができます。

使用例


#include <stdio.h>
#include <string.h>

int main() {
    char email[] = "user@example.com";
    const char sep[] = "@.";
    char* token = strtok(email, sep);

    while (token != NULL) {
        printf("%s\n", token);
        token = strtok(NULL, sep);
    }

    return 0;
}

strerror関数

strerror関数は、エラーコードに対応するエラーメッセージを取得するために使用されます。

関数名 機能 ヘッダ
strerror エラーコードに対応するエラーメッセージを取得 #include <string.h>

使用例


#include <stdio.h>
#include <string.h>

int main() {
    for (int i = 0; i < 5; i++) {
        printf("Error %d: %s\n", i, strerror(i));
    }
    return 0;
}

エラーハンドリングの際には、errno変数と組み合わせて使用することで、より具体的なエラー情報を取得できます。

perror関数との比較


#include <stdio.h>

int main() {
    FILE* file = fopen("nonexistent.txt", "r");
    if (!file) {
        perror("ファイルオープンエラー");
    }
    return 0;
}

perror関数は、エラーメッセージにカスタムメッセージを追加して表示するため、デバッグ時に便利です。

タグ: C言語 文字列操作 標準ライブラリ メモリ管理 エラーハンドリング

8月8日 03:06 投稿