Итак, я довольно новичок в 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 () с фамилией, и это всегда больше, чем должно быть. Спасибо!