2011-10-28 7 views
1
`char *ParseCmdX(char *buf,int len) 
{ 
char *p; 
p = strtok(buf," ,"); 
p = strtok(NULL," ,"); 
char *ptr = (char *)malloc(strlen(p)+1); 
strcpy(ptr,p); 
return ptr; 
}` 

p = strtok(NULL," ,");でアクセス違反エラーが発生するのはなぜですか?私はそれが壊れるNULLパラメータを置くとき ...С++ strtok cant 2トークンを取得する

bufが "ダスSDG HFG JGH"

のようななめらかで誰も私を助けることができますか?

+0

char x[] = "das sdg hfg jgh"; char *c = ParseCmdX(x, strlen(x)); 

これは、しかし、障害をSEG? – Joe

+0

"das gfd jgh khh" - buf – Hakon89

+0

@HakこれをC++とタグ付けしましたが、あなたは 'malloc'、' char * 'や' strcpy'のようなものを使っています。文字列やスマートポインタを使用する代わりに、このようにしている理由はありますか? – greatwolf

答えて

0

strtokへの最初の呼び出し、つまりstrtok(but、 "、")がNULLを返したかどうかを確認しなければなりません。具体的には、bufのParseCmdXに渡していますか?

+0

なぜNULLを返す必要がありますか?私は "asd hfdkj gdhk fhjsk"のような文字列を入れた場合 – Hakon89

+0

私はチェックを行い、それでもAVエラーにクラッシュする – Hakon89

+1

Ahmedは正確です。 "das sdg hfg jgh"は "、"がないので、pはNULLです。 pがnullになると、何も返さないので、次のstrtok呼び出しは文字列の最後から移動します。 Bang、Nasal Demons everywhere :) – EvilTeach

0

この関数をどのように呼び出すのですか、bufはどのように割り当てられていますか? bufは読み取り専用でもconstでもかまいません(strtokは入力バッファを呼び出したときにそれを変更します)。

xがchangableあるので、これは、作品: "BUF" の値がどのようなものに見えるん

char *y = "das sdg hfg jgh"; 
    char *c = ParseCmdX(y, strlen(y)); 
関連する問題