C ++ strtok関数

char ParseCmd(char *buf,int len)
{
     char *p;
     p = strtok(buf," ");
     return *p;
}

なぜこの関数はバッファ全体の最初のシンボルだけを返しますか?バッファを "fsa rew qwe"に設定すると、期待される "fsa"の代わりに "f"だけが返されます。

"mÀ£*" - それは今、私が得ることです。どうして ?

char dum = *InstList->Lines->GetText(); LoadLibrary("SyntaxP.dll"); char *dum1 = ParseCmd(&dum,32); InstList->Lines->Add(dum1);

1
C ++でCの文字列と std :: strtok()を使用しているのはなぜですか? std :: string を使用すると、初心者にとってははるかに簡単です。そして、できるだけ早くあなた自身の良いC ++の本を手に入れてください。
追加された 著者 sbi,

3 答え

戻り値の型は文字を表す char なので、 strtok()で返されたポインタを逆参照します。

2
追加された

char の値を返すので、ポインタ p が指す文字列の最初の文字のみを意味します。あなたの機能。

関数のプロトタイプは次のとおりです。

char* ParseCmd(char *buf,int len);
^^^^^

Online Demo:

#include
#include
#include

char* ParseCmd(char *buf,int len)
{
     char *p;
     p = strtok(buf," ");
     char *ptr = (char *)malloc(strlen(p)+1);
     strncpy(ptr,p,strlen(p));
     return ptr;
}

int main()
{
    char array[]="fsa rew qwe";
    char* ret = ParseCmd(array,11);
    printf("[%s]",ret);

    /*If You Forget this,You cause a Memory Leak*/    
    free(ret);

    return 0;
}

Output:

[fsa]

Disclaimer: I have not really used any C++ in the code because since You are using strtok and char * instead of string I believe the Q is more C than C++.

1
追加された
ダムは、charでなく、char *でなければなりません。 charは文字、char *は文字のセット(つまり文字列)へのポインタです。あなたは現在、テキストを取得してから、最初の文字をダムにコピーしています。あなたはあなたの文字列としてdumのアドレスを渡していますが、それは文字列ではなく、文字です。 ParseCmd()は文字列を期待しているので、メモリを介して読み込みが行われ、ヌルになるとガベージコレクションが行われます。
追加された 著者 GazTheDestroyer,
ありがとうございました!試してみようぜ
追加された 著者 Hakon89,
そして今、私はその文字列を "m?£*"にしていますが、地獄でしょうか?何が私は再び間違っているの?
追加された 著者 Hakon89,
char dum = * InstList-> Lines-> GetText(); char * dum1 = ParseCmd(&dum、32); InstList-> Lines-> Add(dum1);
追加された 著者 Hakon89,
ありがとうございました!しかし、もし私がTMemoから文字列を取得したいのであれば?
追加された 著者 Hakon89,
okありがとう。読まない。
追加された 著者 Hakon89,
@ Hakon89:あなたのプログラムを投稿してください。
追加された 著者 Alok Save,
@ Hakon89:サンプルプログラムを追加しました。
追加された 著者 Alok Save,
@ Hakon89: TMemo とは何ですか?通常、私たちはコードを書くのではなく、あなたの問題を解決するためのガイドラインを提供するだけです。あなたが使い方について混乱していると思ったので、ここにコードを追加しました。本を読むか、 strtok のドキュメントを参照して問題を見つけ、あなたは特定の問題に悩まされています。そして、犯罪はありませんが、これはここでどのように働くのですか。
追加された 著者 Alok Save,

Cスタイルの文字列と同様に、 p は実際には文字配列です。逆参照した場合、あなたは文字を取得します。 return * p の代わりに ParseCmd return p

0
追加された