Я создаю функцию, которая берет запись людей (хранится в *individual
в параметрах функции), отделяет запись, чтобы получить день рождения людей, а затем функция вычисляет их возраст. Проблема, с которой я сталкиваюсь, - это когда я использую strrchr
для поиска записи для дня рождения, она меняет исходное значение, когда я этого не хочу. Итак, вместо хранения Steven, Cortright, 3/1/1940
он должен хранить Steven, Cortright, 3
Значение возвращает неверное значение
Я пробовал все, что я могу придумать, чтобы исправить это. Ниже мой код, я признателен за любую помощь/совет:
char* calcage(char *individual)
{
time_t current_time;
char *c_time_string;
char *birthday;
char *bmonth, *bday, *byear;
int numbmonth, numbday, numbyear;
struct tm str_bday;
time_t time_bday;
double diff;
double years;
double monthscalc;
int monthsage;
int yearsage;
current_time = time(NULL);
c_time_string = ctime(¤t_time);
birthday = strrchr(individual, ',');
birthday++;
bmonth = strtok(birthday, "/");
bday = strtok(NULL, "/");
byear = strtok(NULL, "/");
numbmonth = atoi(bmonth);
numbday = atoi(bday);
numbyear = atoi(byear);
str_bday.tm_year = numbyear - 1900;
str_bday.tm_mon = numbmonth - 1;
str_bday.tm_mday = numbday;
str_bday.tm_hour = 0;
str_bday.tm_min = 0;
str_bday.tm_sec = 1;
time_bday = mktime(&str_bday);
diff = difftime(current_time, time_bday);
years = diff/60/60/24/365.242;
yearsage = (int) years;
int inpart = (int) years;
double months = years - inpart;
monthscalc = (365.242 * months)/30.4368;
monthsage = (int) monthscalc;
char *calculatedAge = (char *)malloc(50*sizeof(char));
snprintf(calculatedAge,100, "You are %d years and %d months old.", yearsage, \
monthsage);
return calculatedAge;
}
Это связано с strtok, который изменяет свой аргумент, как описано в docs – user3159253