文字列トークンをチェックしてファイルを解析する短い関数を書いています。テストに使用しているファイルの9行目である「visgroups」(* sourceというバッファーにあります)に到達すると停止するはずです。「versioninfo」は最初の行です。このコードを実行すると、プログラムを手動でキャンセルするまで、「versioninfo」が繰り返し出力されます。strtok関数が動かないのはなぜですか?
このポイントに到達したら、ソースのさまざまな操作を実行します。そのため、ループ制御変数は「アクティブ」と呼ばれます。これは、strtokがスレッドセーフではないという事実と関係がありますか?他のスレッドではソースを使用していません。
int countVisgroups(int *visgroups, char *source) {
const char delims[] = {'\t', '\n', ' '};
int active = 0;
char *temp;
while (!active){
temp = strtok(source, delims);
if (temp == NULL) {
printf("%s\n", "Reached end of file while parsing.");
return(0);
}
if (strncmp(temp, "visgroups", 9) == 0) {
active = 1;
return(0);
}
printf("%s\n", temp);
}
return(0);
}