Прежде всего, вы хотите использовать strtol
вместо atoi
(или sscanf
, см. Ниже).Функция atoi
небезопасна.
Во-вторых, strtok
необходимо NULL
вместо string
:
pointerToDateStructure->day = atoi(strtok( string, delim));
pointerToDateStructure->month = atoi(strtok( NULL, delim)); /* NULL instead of string. */
pointerToDateStructure->year = atoi(strtok( NULL, delim)); /* See above. */
В-третьих, вы не проверяете значение, возвращаемое strtok
.
Как примечание, вы уверены, что sscanf
не может проанализировать ваши данные?
sscanf(str, "%d/%d/%d", &day, &month, &year)
РЕДАКТИРОВАТЬ Объяснение abelenky :
Функция strtok имеет состояние.Он «запоминает», над какой строкой он работал раньше, и, если вы передадите «NULL», он продолжит работать с той же самой строкой, обнаружив, где остановился раньше.Если вы передаете ему строковый параметр каждый раз, он начинается каждый раз с начала.