0

単語数と単語の最大長がわからない場合に、char** にメモリを割り当てる方法に興味があります。複数のトークン (単語) で文字列 (char* として取得) を分割し、個別の単語を char** に保存する必要があります。*char のサイズを (文字列の長さ + 1) として割り当てることができ、各 char[i] に対しても (文字列の長さ + 1) を割り当てることができることを理解しています。文字列内の各文字を個別の単語として。したがって、コードは次のようになると思います。

char **words = malloc((strlen(str)+1) * sizeof(char*));
int i;
for( i=0; i < strlen(str)+1; i++)
 words[i] = malloc((strlen(str)+1) * sizeof(char));

それが正しいか?より効率的であれば、私はできますか?

4

2 に答える 2

0

各単語に個別にメモリを割り当てる必要はありません。代わりに、文字列全体をstrdup(str)(またはmalloc(strlen(str)+1)and ) で複製し、単語の区切り記号を(たとえば)strcpy()に置き換えることでコピーを変更できます。'\0'strtok()

単語の最大数について: 連続する 2 つの区切り文字がそれらの間に空の単語を形成する場合、strlen(str)+1 単語が存在する可能性があります。2 つ以上の連続する区切り文字が 1 つの区切り文字と見なされる場合、単語の数は半分しかありません。

于 2015-05-11T10:45:28.200 に答える
0

strlen()一度だけ実行してその変数を保存することで、より高速にすることができます。また、必要以上に多くを割り当てています。最初にあなたが持っている単語の数を見つけてchar **wordsそれによって割り当て、次にwords[i]各単語に十分な数だけを割り当てます。

于 2014-09-05T17:23:00.750 に答える