C言語。--strtok--

ぜんぜんPOVじゃないが自分メモ

strtok:文字列を区切り文字でスライスする

要string.h
書式:
char* strtok(char* string1, const char* string2);
string1が分割対象、string2が区切り文字(のポインタ)。
スライスできたらスライスのポインタを、できなかったらNULLを返す
分割対象を示すのは一度だけで、二度目以降はstring1にNULLを指定すると勝手に後ろを切りに行く。たぶん\0が出るまで。
つまりどうやってか知らんが前回ぶった切った座標を保持している。
これがひとつしかないのでstrtokのループの中でstrtokは許されない。不便もいいとこだ。


@sliced = split(/./,$string);
は実用上

char string1[256];//で宣言されてどっかで値を入れられて
char sliced1[256];char sliced2[256];char sliced3[256];char sliced4[256];
char* sliced[] = {sliced1,sliced2,sliced3,sliced4};
char* temp;
temp = strtok(string1, ".");
strcpy(sliced[0], temp);
for(int i=1,i<4,i++){
temp = strtok(NULL, ".");
if(temp){
strcpy(sliced[i], temp);
}
}
・・・みたいな処理と互換になる。ある程度区切り数がわかってないといけないし。えぇめんどくさいな!

なお悪いことに、string2は区切り文字をあらわす文字列のポインタであって区切り文字列のポインタではない。"<>"みたいに2文字の文字列を渡した場合は"<"と">"で切ろうとする。"<>"のある場所でもちゃんと切ってくれるのはいいが"<"が単独で文中にあっても切ってしまう。どないせぇと・・・
あぁまだあった。"uni<>ikura<>tako"なら真面目に切ってくれてsplitと同じ動作だけど"<><>uni"だとslice[0]がuniになる・・・この壁はstrtokでは越えられそうにない。