2012-04-23 7 views
11

私は "OpenStack:OpenStack1"のような値を持つconst char *変数を持っています。 const char *型の区切り文字が ":"のstrtokを使用して、このconst char *をトークン化します。しかし、問題はstrtokが次のような型になっていることです: char * strtok(char * str、const char * delimiters);Const char *をトークン化するためのStrtokの使い方

つまり、char *でなければならないので、最初の入力にはconst char *を使用できません。このconst char *をchar *に変換する方法を教えてください。

ありがとうございます。

+1

コピーしますか? http://linux.die.net/man/3/strdup –

+0

そのページからコピーする必要がありますか? –

+0

いいえ、私はあなたが説明された関数を使用して文字列をコピーする必要があることを意味しました。 –

答えて

12

実際にあなたの文字列にstrtokが書き込むので、それを書き込むことができるコピーをトークン化する必要があります。

char* copy = strdup(myReadonlyString); 
...tokenize copy... 
free(copy); 
+0

ありがとう、それは動作します。 –

+3

コピーを作成するC++の方法は 'std :: vector copy(myReadonlyString、myReadonlyString + strlen(myReadonlyString));'です。次に、 'copy-> data()'をトークン化することができます。コンパイラは、範囲外になるたびに自動的にコピーの割り当てを解除します。 – ManuelAtWork

0

変更不可能な文字列のコピーを作成し、strtokを使用することができます。

mallocstrcpyを移植して文字列をコピーできます。 、

char tokenedStr[] = "OpenStack:OpenStack1"; 

ことができない場合はchar型の配列にコピーします:

1

は、配列として宣言します。

+0

それはまた良い方法です。 –

関連する問題