strtok関数の動作とnull終端子の扱いについての分析


  1. strtok関数の基本的な使い方: strtok関数は、文字列を分割するために以下のように使用します。
char* strtok(char* str, const char* delimiters);
  • str: 分割する文字列へのポインタ
  • delimiters: デリミタ(区切り文字)となる文字列へのポインタ

strtok関数は、最初の呼び出し時にstrに分割する文字列を渡し、以降の呼び出しではstrNULLを渡すことで続きの文字列を分割します。また、delimitersに指定した文字列が見つかるたびに分割位置を示すポインタを返します。

  1. null終端子の扱い: strtok関数は、分割した各部分文字列の末尾にnull終端子を追加します。これにより、各部分文字列を別々の文字列として扱うことができます。

  2. 注意点とコード例: strtok関数の使用には以下のような注意点があります。

  • strtok関数は、元の文字列を変更します。null終端子を追加するため、元の文字列が変更されることに注意してください。
  • strtok関数は、スレッドセーフではありません。マルチスレッド環境で使用する場合は注意が必要です。

以下に、strtok関数の使用例を示します。

#include <stdio.h>
#include <string.h>
int main() {
    char str[] = "Hello,World,This,is,a,test";
    const char delimiters[] = ",";
    char* token = strtok(str, delimiters);
    while (token != NULL) {
        printf("%s\n", token);
        token = strtok(NULL, delimiters);
    }
    return 0;
}

上記のコードは、文字列"Hello,World,This,is,a,test"をカンマで分割して各部分文字列を表示する例です。null終端子によって、各部分文字列が正しく表示されます。

以上が、strtok関数の動作とnull終端子の扱いについての分析とコード例です。