C语言如何在main函数中打印其他函数的char字符串,是否要修改void返回类型
首先明确两个核心问题的答案:
- 你当前代码里的
barang1是nama_barang的局部变量,作用域仅限该函数内部,main函数无法直接访问。 - 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
相关产品推荐
相关产品推荐

