Как вырезать строку, которая варьируется по размеру с strtok?Проблема с длиной токенов - PullRequest
0 голосов
/ 01 апреля 2019

Итак, я довольно новичок в C, и я получаю в качестве ввода строку, подобную этой a:name:number:number:number:number:name:name, и я использую strtok, чтобы получить все имена и числа без ":". Дело в том, что размер строки может варьироваться, и он может иметь до двух имен (всегда в конце), таких как: a:name:number:number:number:number:name:name:name или a:name:number:number:number:number:name:name:name:name.

Теперь я использую структуру и strcpy(), чтобы получить каждое имя в структуре, но из-за возможного изменения количества имен в конце длина фамилии всегда на 1 больше, чем должна быть. Например, ввод будет a:john:123:12345:45677:12:james bond:darth vader, а strlen(a.name3) (Дарт Вейдер) будет 12. Это для случая, когда в конце есть только 2 имени. 4 имени в конце - это максимальное количество имен (минимум 1), и я не знаю, почему это происходит.

Вот мой код:

char *token,*token1,*token2;
structname a;
token = strtok(c,":"); //c is the input string
strcpy(a.name1,strtok(NULL,":"));
a.number1 = atoi(strtok(NULL,":"));
a.number2 = atoi(strtok(NULL,":"));
a.number3 = atoi(strtok(NULL,":"));
a.number4 = atoi(strtok(NULL,":"));
strcpy(a.name2,strtok(NULL,":"));
strcpy(a.name3,strtok(NULL,":"));
if ((token = strtok(NULL,":")) != NULL){
strcpy(a.name4,token1);
if ((token = strtok(NULL,":")) != NULL)
strcpy(a.name5,token2);}

Я сделаю strlen () с фамилией, и это всегда больше, чем должно быть. Спасибо!

...