strtok
文字列をトークンに分割するために使用しています。トークンの数を実際にカウントする関数を知っている人はいますか?
コマンド文字列があり、それを分割して引数を に渡す必要がありますexecve()
。
ありがとう!
編集
execve
として引数を取るchar**
ので、ポインターの配列を割り当てる必要があります。トークンがいくつあるかわからないと、いくつ割り当てればよいかわかりません。
1 つのアプローチは、単純strtok
にカウンターで使用することです。ただし、元の文字列が変更されます。
別のアプローチはstrchr
、次のようにループで使用することです。
int count = 0;
char *ptr = s;
while((ptr = strchr(ptr, ' ')) != NULL) {
count++;
ptr++;
}
複数の区切り文字がある場合は、次を使用しますstrpbrk
。
while((ptr = strpbrk(ptr, " \t")) != NULL) ...
トークンの数は、使用される区切り文字の出現頻度よりも 1 つ多くなります。したがって、あなたの質問はノーを見つけることになります。文字列内の文字の出現回数
cのstrtok関数で使用される区切り文字は「 」であると言います
int count =0,i;
char str[20] = "some string here";
for(i=0;i<strlen(str);i++){
if(str[i] == ' ')
count++;
}
トークンの数は count+1 と同じになります