gpt4 book ai didi

可以使以下内容更简单/更有效吗?

转载 作者:行者123 更新时间:2023-12-04 12:02:43 25 4
gpt4 key购买 nike

我正在尝试将一些代码从动态类型语言转换为 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 种不同的输出转换器,它们都(甚至 future
个)保证只产生 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 */
}

这种方法可以工作,还是有更好的方法?

最佳答案

为了避免重新计算,您的输出转换器需要有这样的原型(prototype):

static char * convert_type1(char *out, const char *in, int *len);

如此称呼:
result = convert_type1(output, str, &strlen);

在内部,输出转换器需要读取现在包含字符串长度的指针的内容,并在返回之前覆盖该指针的内容。

在堆与堆栈的问题上,确实需要使用堆,因为分配在堆栈上的变量将在函数结束后立即消失。

关于可以使以下内容更简单/更有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4296031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com