2011-10-28 24 views
-1
char ParseCmd(char *buf,int len) 
{ 
    char *p; 
    p = strtok(buf," "); 
    return *p; 
} 

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

"mÀ£*" - これは今すぐ取得しています。どうして ?

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

+0

どうしてCの文字列と 'std :: strtok()'をC++で使っているのですか? 'std :: string'を使用してください。これは初心者にとってははるかに簡単です。そして、あなた自身[良いC++の本](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)を手に入れてください。 – sbi

答えて

2

戻り値の型がcharであるため、返されるポインタはstrtok()です。

1

あなたは。あなたがあなたの関数からchar *を返す必要がありpポインタが指す文字列の最初の文字だけを意味char値を、戻ってきているので。

あなたの関数がプロトタイプを持っている必要があります。

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

Online Demo

#include<string.h> 
#include<stdio.h> 
#include<stdlib.h> 

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; 
} 

出力:

[fsa] 

を免責事項:の代わりにstrtokchar *を使用しているので、実際にはC++は使用していません。QはCよりC++と思われます。

+0

ありがとう!それでは – Hakon89

+0

を試してみて、今は "mÀ£*"という文字列を取得していますが、地獄ですか?何が私は再び間違っているの? – Hakon89

+0

@ Hakon89:プログラムを投稿してください。 –

0

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