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

C语言如何在main函数中打印其他函数的char字符串,是否要修改void返回类型

首先明确两个核心问题的答案:

  1. 你当前代码里的barang1是nama_barang的局部变量,作用域仅限该函数内部,main函数无法直接访问。
  2. C语言没有内置string类型(该类型属于C++),所以不能将返回值设为string;你可以将返回值改为char*类型,但不能直接返回局部数组的地址,否则会出现野指针错误。

正确实现方案

推荐你改造nama_barang函数,将商品名存储在静态数组中,通过传入索引返回对应的字符串指针,实现代码如下:

#include <stdio.h>

const char* nama_barang(int index) {
    // 静态存储的商品列表,生命周期和程序一致,不会随函数退出销毁
    static const char* barang[] = {
        "ORICO 4 Port Usb Hub 3.0",
        "ORICO 7 Port USB Hub 3.0",
        "ORICO 3 Port Charger 65W Type C",
        "ORICO USB 2.0 Micro B 1.5M",
        "ORICO USB 3.1 Type C 1.5M0",
        "Vention Kabel HDMI v2.0 1M",
        "Vention Kabel HDMI v2.0 2M",
        "Keyboard Votre KB2308 USB",
        "Uticon Stop Kontak 6 lubang",
        "Samsung SSD 860 EVO 250 GB"
    };
    // 索引越界保护
    if (index < 1 || index > 10) {
        return "无效的商品编号";
    }
    return barang[index - 1];
}

int main() {
    // 打印barang1,传入索引1即可
    printf("barang1: %s\n", nama_barang(1));
    return 0;
}

补充说明

  • 静态数组的存储位置在全局静态存储区,不会在函数调用结束后被回收,因此返回的指针是合法可访问的。
  • 如果你一定要保留原代码中逐个定义barang1~barang10的写法,只需要给每个数组加static修饰,再通过分支判断返回对应指针即可,示例如下:
const char* nama_barang(int index) {
    static char barang1[35] = "ORICO 4 Port Usb Hub 3.0";
    static char barang2[35] = "ORICO 7 Port USB Hub 3.0";
    // 其余barang3~barang10按相同格式定义即可
    switch(index) {
        case 1: return barang1;
        case 2: return barang2;
        // 其余case分支对应barang3~barang10
        default: return "无效编号";
    }
}

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

相关产品推荐
方舟 Agent Plan

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

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