2013-04-25 2 views
1

У меня проблема с strtok() - он не возвращает вход так, как ожидалось.Как исправить этот вызов 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 я хочу, чтобы заполнить CTEXT с [1,2,3,4]. Это не работает, однако. Что я делаю неправильно? Любая помощь оценивается.

ответ

3
ctext[mlen] = (int) pch; 

Это сохраняет числовое значение указателя, в то время как вы действительно хотите характер указал к указателю. Время, чтобы прочитать хорошую статью/книгу/учебник по указателям.

ctext[mlen] = *pch; 

- это то, что вы ищете.

1

Вы хотите, чтобы получить символ в первом байте pch - не адрес pch

ctext[mlen] = *pch; 
+0

Кажется, у нас есть новый очень активный участник тега C. Добро пожаловать в Stack Overflow. –

+0

Спасибо ~ smile ~ –

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

случай ctext только для одного символа: другой ответ. – BLUEPIXY

Смежные вопросы