1

我对 strtok() 有疑问 - 它没有按预期返回输入。

void parse_input(const char *input,unsigned char *ctext, int mlen){
  char * str = strdup(input);
  char * pch = strtok(str,"-");

  while (pch != NULL)
  {

    ctext[mlen] = (int) pch;


    pch = strtok (NULL, "-");

    mlen++;

  }

在输入时,1-2-3-4 我希望它用 [1,2,3,4] 填充 ctext。然而,这行不通。我究竟做错了什么?任何帮助表示赞赏。

4

3 回答 3

3
ctext[mlen] = (int) pch;

它存储指针的数值,而您确实想要指针指向的字符。是时候阅读一篇关于指针的好文章/书籍/教程了。

ctext[mlen] = *pch;

就是你要找的。

于 2013-04-25T20:49:20.237 回答
1

您想获取第一个字节中的字符pch-- 而不是地址pch

ctext[mlen] = *pch;
于 2013-04-25T20:49:00.580 回答
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void parse_input(const char *input,unsigned char *ctext[], int *mlen){
    char * str = strdup(input);
    char * pch = strtok(str,"-");

    while (pch != NULL){
        ctext[(*mlen)++] = (unsigned char*)pch;
        pch = strtok (NULL, "-");
    }
}

int main(void){
    unsigned char *ctext[16];
    int mlen=0;
    int i;

    parse_input("1-2-3-4", ctext, &mlen);
    printf("[ ");
    for(i=0;i<mlen;++i){
        printf("%s", ctext[i]);
        if(i<mlen -1)
            printf(", ");
    }
    printf(" ]\n");
    //free(ctext[0]);
    return 0;
}
于 2013-04-25T21:40:02.693 回答