C ++ функция strtok - PullRequest
       6

C ++ функция strtok

0 голосов
/ 28 октября 2011
char ParseCmd(char *buf,int len)
{
     char *p;
     p = strtok(buf," ");
     return *p;
}

Почему эта функция возвращает только первый символ во всем буфере? Если я установлю для буфера "fsa rew qwe", он вернет только "f" вместо ожидаемого "fsa".

"mÀ £ *" - это сейчас я получаю. Зачем ?

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

Ответы [ 3 ]

2 голосов
/ 28 октября 2011

Поскольку ваш тип возвращаемого значения - char, который представляет символ, и вы разыменовываете указатель, возвращаемый strtok().

1 голос
/ 28 октября 2011

Поскольку вы возвращаете значение char, что означает только первый символ строки, на которую указывает указатель p. Вы должны вернуть char * из вашей функции.

Ваша функция должна иметь прототип:

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

Демонстрационная версия :

#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]

Отказ от ответственности: Я на самом деле не использовал C++ в коде, потому что поскольку вы используете strtok и char * вместо string, я считаю, что Q больше C, чем C++.

0 голосов
/ 28 октября 2011

Как и любая строка в стиле C, p на самом деле является массивом символов.Если вы разыграете это, вы получите характер.Имейте свой ParseCmd return p вместо return *p.

...