Я слышал от кодера, что замена литералов c-строки вызывает неопределенное поведение.
например:.
char *a = "111";
a[0] = '2'; //Undefinded behaviour
Однако я не нахожу обходного пути, как в следующем упражнении, где мне нужно перевести 12-часовое время в военное время:
char* timeConversion(char* s) {
char* military_time = malloc(9*sizeof(char));
strncpy(military_time, s,8);
if(s[8] == 'P'){
if(s[0]!='1' || s[1]!='2'){
char hours = 10*(s[0]-'0')+(s[1]-'0');
hours += 12;
char tenner = (hours/10) + '0';
char onner = hours%10 + '0';
military_time[0] = tenner; //undefined
military_time[1] = onner;
}
} else {
if(s[0]=='1' && s[1] =='2'){
military_time[0] = '0';
military_time[1]= '0';
}
}
return military_time;
}
Есть ли способ обойти эту проблему?
Кроме того, меня интересует поведение этого кода.
Замена:
char* military_time = malloc(9*sizeof(char));
с:
char* military_time = "12345678";
вызывает неправильное поведение. Я не думаю, что во втором случае переменная устаревает. Может ли это быть проблемой сайта, на который я отправил ответ?
Спасибо.