2012-01-16 11 views
-2

ネットワークデータのペイロードを「改行」または「改行」文字(10進数、16進数0x0A)で分割する必要がありました。 私はいくつかの問題が発生したstrtok()関数を使用しようとしました 私は "新しい行"文字でconst char文字列を作りたいと思ったとき。strtok()デリミタとしてconst char *に見えない文字

プロト:これはキャストせずにint型からポインタをすることについて警告しました

`const char delim[] = 10;` 

;:

`strtok(char * StringToSplit, const char * Delimiters)` 

これは無効なイニシャライザを作りましたstrtokで使用される場合 Allthough
printf("Delim: %x", delim)

)は(DELIM(は0xa) アプリケーションがクラッシュの正しい値を示しました。

`const char * delim = 10;` 

警告またはエラーのprintfは( "DELIM:X%"、DELIM)が(正しい値 しかしはstrtokを与えた)(ただし、私は期待通りに)動作しませんでした。

`char delim = 10;` 
`(ofc strtok(..., &delim))` 

これは、仕事をするように見えたが、私はまだのconst char型のPTRは()関数をstrtokはと予想された以外のconst char型のPTRを渡すことについての警告を受けました。

`char delim[] = "#";` 
`delim[0] = 10;` 

最後に、これは警告なしに動作するようです。

`char tmp[] = "#";` 
`tmp[0] = 10;` 
`const char *delim = tmp;` 

質問はstrtok()関数に、このような非可視文字を渡すために最も簡単かつエレガントな方法であるもの、ありますか? 私には、これはちょうどkludgedコードですように感じる。

答えて

0

これはうんざりしていないか、またはエレガントではありません。バグがたくさんあります。

const char delim[] = 10; 

は、なぜあなたはここに配列を宣言していますか?これは、次のようになります。

const char delim = 10; 

そして:

char delim[] = "#"; 

は、なぜあなたは配列を宣言し、文字列に等しい、それを設定していますか?これが可能shuld:

char delim = '#'; 
1

あなたが必要:

const char *delim = "\n"; 

2番目のパラメータが区切り文字を含むC文字列である必要があります。あなたの様々な化身に何があるのは、ではないということです。Cの文字列がCの文字列に間違ってキャストされています。

関連する問題