Я пытаюсь преобразовать некоторый код из языка с динамической типизацией в C. Пожалуйста, потерпите меня, поскольку у меня пока нет практического опыта работы с C.
У меня есть диспетчерская функция, которая решает, как преобразоватьэто ввод, основанный на значении аргумента флага.
void output_dispatcher(char *str, int strlen, int flag) {
char output[501];
char *result;
switch (flag) {
/* No conversion */
case 0:
result = str;
break;
case 1:
result = convert_type1(output, str, strlen);
len = strlen(result);
break;
/* ... */
}
/* do something with result */
}
В настоящее время у меня есть 5 различных выходных преобразователей, и они все (даже будущие) гарантированно будут производить только 300-500 символов.Из моего прочтения предпочтительнее использовать переменную кучи, чем динамически выделять место в стеке, если это возможно.Объявление функции для одного выглядит следующим образом:
static char * convert_type1(char *out, const char *in, int inlen);
Я хочу избежать strlen в диспетчере, так как нет необходимости пересчитывать размер вывода, потому что выходные преобразователи знают это, когда они конструируют вывод.Кроме того, поскольку я передаю указатель на выходную переменную, мне не нужно возвращать указатель результата, верно?Поэтому я изменяю его следующим образом, но получаю ошибку компиляции «несовместимого типа».
void output_dispatcher(char *str, int strlen, int flag) {
char output[501];
switch (flag) {
/* No conversion */
case 0:
output = str; /* ERROR: incompatible type */
break;
case 1:
strlen = convert_type1(output, str, strlen);
break;
/* ... */
}
/* do something with result */
}
Может ли этот подход работать или есть лучший путь?