このエントリーをはてなブックマークに追加


 指定した区切り文字で文字列を分割する・strtok

カンマなどの区切り文字がある文字列を指定した区切り文字で分割するstrtokについてのCサンプルコードと実行例を以下に記します。


スポンサーリンク

関連記事

strtok書式

strtokの書式を以下に記します。

  • 必要なインクルードファイル
    #include <string.h>
  • strtokの書式
    char *strtok(char *str, const char *delim);
  • 戻り値
    文字列のポインタ
  • 引数
    1つ目: 対象文字列。2回目以降はNULLを指定する。
    2つ目: 区切り文字を指定する

strtokのCサンプルコード

filestrtok.c (改行コードLF)

#include <stdio.h>
#include <string.h>
int main(void) {
    char s[] = "ubuntu,debian,fedora,redhat,suse,mint,vine";
    char *p = NULL;

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

    return 0;
}

1回目のstrtok関数では、文字列のポインタを渡していますが2回目以降はNULLになっているのがCサンプルコードから読むことができます。

strtokのCサンプルコードの実行結果

コンパイルし実行した結果を以下に記します。

$ gcc strtok.c -o strtok
$ ./strtok 
ubuntu
debian
fedora
redhat
suse
mint
vine

注意事項

上記サンプルコードの

char s[] = "ubuntu,debian,fedora,redhat,suse,mint,vine";

char *s = "ubuntu,debian,fedora,redhat,suse,mint,vine";

にするとSegmentation faultになります。

その理由は、char[]とchar*には違いがあります。

簡単に説明するとchar*で渡される文字列は変更禁止となります。
したがって、型があっているのでコンパイルは通りますが、実行時にSegmentation faultになるので注意が必要です。

以上、strtokのCサンプルコードでした。


スポンサーリンク

添付ファイル: filestrtok.c 658件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 21:01:00