カンマなどの区切り文字がある文字列を指定した区切り文字で分割するstrtokについてのCサンプルコードと実行例を以下に記します。
strtokの書式を以下に記します。
#include <string.h>
char *strtok(char *str, const char *delim);
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サンプルコードから読むことができます。
コンパイルし実行した結果を以下に記します。
$ 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サンプルコードでした。