C ++ strtok не может получить 2 токена Borland - PullRequest
1 голос
/ 28 октября 2011
char *ParseCmdX(char *buf,int len)  
{  
 char *p;  
 p = strtok(buf," ,");  
 p = strtok(NULL," ,");  
 char *ptr = (char *)malloc(strlen(p)+1);  
 strcpy(ptr,p);  
 return ptr;  
}

Почему я получаю ошибку Access Violation в p = strtok(NULL," ,");? Когда я ставлю NULL параметр, он ломается ...

что-то вроде "das sdg hfg jgh"

Ответы [ 2 ]

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

Как вы вызываете эту функцию и как распределяется buf? Помните, что buf не может быть доступен только для чтения или const (strtok изменяет входной буфер при вызове).

Это работает, потому что х можно изменить:

  char x[] = "das sdg hfg jgh";
  char *c = ParseCmdX(x, strlen(x));

Это, однако, ошибки сегмента:

   char *y = "das sdg hfg jgh";
   char *c = ParseCmdX(y, strlen(y));
0 голосов
/ 28 октября 2011

Вы должны проверить и посмотреть, если первый вызов strtok, а именно strtok (но ",") вернул NULL или нет, если это произошло, то следующий вызов strtok умрет. что конкретно вы передаете ParseCmdX в buf?

...