Итак, я довольно новичок в 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
.
Теперь я использую struct и strcpy, чтобы получить каждое имя в структуре, но из-за количества изменений имен в конце я получаю ошибки сегментации, когда в конце меньше 4 имен, то есть максимальное количество имен (минимум 1), и я думаю, что это потому, что я продолжаю делать strtok после конца строки.
Вот мой код:
char *token;
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,":"));
strcpy(a.name4,strtok(NULL,":"));
strcpy(a.name5,strtok(NULL,":"));
Итак, я предполагаю, что ошибка возникает из-за того, что она продолжает выполнять strtok даже после окончания строки в тех случаях, когда нет 4 отчеств?
Я хочу знать, как я могу, например, в случае, когда в конце есть 2 имени, просто получите a.name4
и a.name5
до "\0"
или просто не получите ничего в этих строках.
Спасибо за время и помощь!