chartoStr()
возвращает локальный номер, который больше не доступен в конце функции, а также отвечает @ kiran Biradar
char s[2] = {c, '\0'};
return s; // bad, UB
Альтернатива вызову chartoStr()
itдля создания строки в коде вызова с использованием составного литерала (начиная с C99).
// strcpy(c_exp, chartoStr(expressions[0]));
// v-----------------------------v---- compound literal
strcpy(c_exp, (char []){expressions[0], '\0'});
Приятным атрибутом является то, что нет дорогостоящего выделения или указателячтобы бесплатно.Составной литерал действителен до конца блока.
Обратите внимание, что код может использовать другие улучшения, сохранив длину size_t len = strlen(c_exp)
один раз в начале cexpGen()
и используя ее
// strcpy(c_exp, chartoStr(expressions[0]));
c_exp[len++] = expressions[0];
c_exp[len] = '\0';
Другие проблемы
Обратите внимание на @ alk о char c_exp[] = "1";
while (c_exp[strlen(c_exp) - 1]) > 10
- это неопределенное поведение должно strlen(c_exp)
вернуть 0. Возможно while ((len = strlen(c_exp)) > 0 && c_exp[len - 1]) > 10
?
if (now = 1)
всегда верно. @ user3386109