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

#contents
#htmlinsertpcsp(c-top.html,c-sp.html)

* 関連記事 [#s3073949]
-[[文字列をコピーする・strcpy>文字列/文字列をコピーする・strcpy]]
-[[文字列内の文字を1つずつ表示する>文字列/文字列内の文字を1つずつ表示する]]
-[[指定した区切り文字で文字列を分割する・strtok>文字列/指定した区切り文字で文字列を分割する・strtok]]
-[[文字列置換のCサンプルコード>文字列/文字列置換のCサンプルコード]]
-[[小文字を大文字に変換する・toupper>文字列/小文字を大文字に変換する・toupper]]
-[[大文字を小文字に変換する・tolower>文字列/大文字を小文字に変換する・tolower]]


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

* strtokのCサンプルコード [#sa33fff9]
&ref(strtok.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サンプルコードの実行結果 [#c9edbad7]
コンパイルし実行した結果を以下に記します。
 $ gcc strtok.c -o strtok
 $ ./strtok 
 ubuntu
 debian
 fedora
 redhat
 suse
 mint
 vine

* 注意事項 [#o10023d7]
上記サンプルコードの
 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サンプルコードでした。

#htmlinsertpcsp(c-btm.html,c-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS