私はstrtok
を使って文字列をトークンに分割しています。実際にトークンの数を数える関数を知っている人はいますか?Cでトークンを数える方法はありますか?
私はコマンド文字列を持っており、それを分割して引数をexecve()
に渡す必要があります。
ありがとうございます!
編集
execve
はchar**
として引数を取りますので、私はポインタの配列を割り当てる必要があります。私はどれくらいのトークンがあるのか分からずにどれくらい割り当てるべきか分かりません。
私はstrtok
を使って文字列をトークンに分割しています。実際にトークンの数を数える関数を知っている人はいますか?Cでトークンを数える方法はありますか?
私はコマンド文字列を持っており、それを分割して引数をexecve()
に渡す必要があります。
ありがとうございます!
編集
execve
はchar**
として引数を取りますので、私はポインタの配列を割り当てる必要があります。私はどれくらいのトークンがあるのか分からずにどれくらい割り当てるべきか分かりません。
1つの方法は、単にカウンタを使用してstrtok
を使用することです。ただし、元の文字列が変更されます。
int count = 0;
char *ptr = s;
while((ptr = strchr(ptr, ' ')) != NULL) {
count++;
ptr++;
}
あなたが複数の区切り文字を持っている場合は、strpbrk
を使用します:
while((ptr = strpbrk(ptr, " \t")) != NULL) ...
複数のフィールド区切り文字(句読点など)がある場合、strchr()が煩雑になります。 –
この場合、 'strpbrk'を使うことができます。 – nneonneo
正解 - ちょうどstrchr()ではありません。 –
トークンの数がより多くの1に過ぎないとして
別のアプローチは、そうのように、ループ内でstrchr
を使用することです使用されるデリミタの出現頻度。だから、あなたの質問は嫌になるよ。
はc strtok関数で使用される区切り文字は「トークンの
int count =0,i;
char str[20] = "some string here";
for(i=0;i<strlen(str);i++){
if(str[i] == ' ')
count++;
}
号カウント+ 1
ジョブは処理しますが、複数の区切り文字が許可されていると面倒です。 –
私は同じ手順を使うことができると思いますし、コーナーケースを処理する必要があります – router
'はstrtok(同じであろう」と言う文字列内の文字の出現回数) 'を呼び出し、カウンタをインクリメントしますか? – alex
そして 'realloc'はサイズを知らないという問題を解決するはずです。 –