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

如何获取shell中export的环境变量值并存储到C程序结构体变量中

解决方法

环境变量不会自动映射到程序的自定义变量中,你当前输出0是因为结构体成员未主动赋值时默认初始化为0,需要通过C标准库提供的接口主动读取环境变量再做类型转换后赋值。

具体实现步骤

  • 首先在balcao.c头部引入所需头文件:
#include <stdlib.h> // 提供getenv、atoi函数
#include <stdio.h>  // 可选,用于异常场景打印提示
  • 读取环境变量并赋值给结构体成员,建议增加空判断处理环境变量未设置的场景:
Balcao b;
b.pid = getpid();

// 读取maxClientes环境变量
char* env_max_cli = getenv("maxClientes");
if (env_max_cli != NULL) {
    b.maxClientes = atoi(env_max_cli);
} else {
    // 可选:设置默认值或者打印提示
    b.maxClientes = 10; // 示例默认值
    // printf("未设置maxClientes环境变量,使用默认值%d\n", b.maxClientes);
}

// 读取maxMedicos环境变量
char* env_max_med = getenv("maxMedicos");
if (env_max_med != NULL) {
    b.maxMedicos = atoi(env_max_med);
} else {
    b.maxMedicos = 20; // 示例默认值
    // printf("未设置maxMedicos环境变量,使用默认值%d\n", b.maxMedicos);
}

注意事项

  • getenv()函数的参数严格区分大小写,必须和你终端export的环境变量名称完全一致。
  • getenv()返回字符串类型的指针,如果环境变量不存在会返回NULL,直接对空指针做字符串转整数操作会触发程序崩溃,必须做空指针判断。
  • 如果需要更安全的字符串转整数操作,可以替换atoi为strtol,可额外处理非数字、数值溢出等异常场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:45:02