2016-10-26 11 views
-1

strtok()を使用するたびに文字列のメモリを再割り当てする必要がありますか?私は、ファイルから行を読み込んでトークンに分割するプログラムを作成しているので、疑問に思っています。それぞれのトークンをcellという変数に格納したいとします。私は複数の文字列を作成し、それらをリンクリストに入れることができますが、それはプログラムにオーバーヘッドを増やすことになるので、できればそれを避けようとします。つまり、strtok()から返された最初の文字列にcellの値を設定し、それを使用して、代入文を使用して、strtok()の形式の2番目の文字列にその値を設定します。私はこれが単に新しい文字配列にポインタをリダイレクトし、古い配列を放棄することを理解します。古い文字列が失われたオブジェクトになるか、strtok()は古い文字列を解放しますか?strtok()関数を使用したときのメモリ割り当て

+0

https://www.google.com/search?q=parse+a+string+using+strtok – alk

+0

['strtok'](http://en.cppreference.com/w/c/string/byte/strtok)はメモリを割り当てません。あなたはそれが何と思いますか? –

+0

'strtok'は区切り文字を連続的に '' \ 0 ''で置き換えます。これは文字列を変更しますが、メモリ内の元の場所の部分文字列を保持します。 –

答えて

1

strtokは文字列を割り当てません。\0文字をソース文字列に挿入し、現在分離しているトークンを指すポインタを返します。ソース文字列のメモリは、複数の文字列(トークン)を格納するメモリになりました。

0

strtokメモリを割り当てません。最初の呼び出しで渡す文字列を変更します。トークンはトークン化されている元の文字列に残されているため、割り当て解除されていない限り(strtokはそれを行いません)、あなたのトークンはそこに残ります。

関連する問題