You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中结构体与字符串传递至函数失败问题求助

结构体参数传递失败的解决方法

我有一段来自外部代码的预定义结构体,且不允许对其进行修改。现在需要在calculate_temperatures函数中实现温度计算逻辑,但尝试了多种参数传递方式均无法正常工作。

相关代码

struct temperature {
    float *data;
    int size;
} temperatures;

struct temperature get_temperature_Data() {
    temperatures.size = 0;
    temperatures.data = (float *)malloc(sizeof(float));
    temperatures.data[temperatures.size++] = 25.9;
    temperatures.data[temperatures.size++] = 55.2;
    return temperatures;
}

void calculate_temperatures(temperatures, testmessage) {
    //test output for correct data
    printf("%s\n", testmessage);
    printf("test %d\n", temperatures.size);
}

int main() {
    int i;
    temperatures = get_temperature_Data();
    calculate_temperatures(temperatures, "Testoutput");
}

我的两次尝试

void calculate_temperatures(temperatures, char *testmessage) {
void calculate_temperatures(temperatures, char testmessage[]) {

问题分析与解决

你的核心问题是函数参数未指定结构体类型,C语言要求每个函数参数必须明确声明类型。你两次尝试都只给第二个参数添加了类型,第一个参数temperatures没有指定其为struct temperature类型,编译器无法识别该参数的类型,导致编译错误。

正确的函数写法

如果你只需要读取结构体数据(不需要修改原结构体),可以按值传递:

void calculate_temperatures(struct temperature temps, char *testmessage) {
    printf("%s\n", testmessage);
    printf("test %d\n", temps.size);
    // 示例:遍历温度数组
    for (int i = 0; i < temps.size; i++) {
        printf("第%d个温度: %.1f\n", i+1, temps.data[i]);
    }
    // 在这里添加具体温度计算逻辑
}

如果需要修改原结构体(比如更新计算后的温度值),建议传指针(避免结构体拷贝开销,同时能直接修改原数据):

void calculate_temperatures(struct temperature *temps, char *testmessage) {
    printf("%s\n", testmessage);
    printf("test %d\n", temps->size);
    // 示例:将摄氏温度转换为华氏温度
    for (int i = 0; i < temps->size; i++) {
        temps->data[i] = temps->data[i] * 1.8 + 32;
        printf("转换后第%d个温度: %.1f\n", i+1, temps->data[i]);
    }
}

调用时需要传递结构体地址:

calculate_temperatures(&temperatures, "Testoutput");

额外注意点

你的get_temperature_Data函数存在内存越界问题:仅malloc了1个float的存储空间,却存入了2个浮点数,会触发未定义行为。可以修改为:

struct temperature get_temperature_Data() {
    temperatures.size = 0;
    // 分配能容纳2个float的空间
    temperatures.data = (float *)malloc(sizeof(float) * 2);
    temperatures.data[temperatures.size++] = 25.9;
    temperatures.data[temperatures.size++] = 55.2;
    return temperatures;
}

内容的提问来源于stack exchange,提问作者user19100872

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:30:54