-1
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);

4

3 回答 3

2

因为您的返回类型char代表一个字符,并且您取消引用由strtok().

于 2011-10-28T12:15:44.753 回答
1

因为您要返回一个char值,这意味着只有指针指向的字符串的第一个字符。您应该从函数中p返回 a 。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++在代码中使用过任何代码,因为因为您使用的是strtokandchar *而不是string我相信 QC超过C++.

于 2011-10-28T12:15:11.603 回答
0

像任何 C 风格的字符串一样,p实际上是一个字符数组。如果你取消引用它,你会得到一个字符。有你的ParseCmd return p而不是return *p.

于 2011-10-28T12:15:28.133 回答