【发布时间】:2010-11-28 17:11:09
【问题描述】:
我正在尝试将一些代码从动态类型语言转换为 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 */
}
这种方法可行吗,还是有更好的方法?
【问题讨论】:
标签: c