You need to enable JavaScript to run this app. C语言中如何将一维长度未知的数组传入函数
优惠活动
大模型
产品
解决方案
定价
更多

C语言中如何将一维长度未知的数组传入函数

原代码段错误原因
  • 主函数中buffer初始化为NULL,没有指向合法可写内存,写入空地址直接触发段错误
  • 数组元素输入的scanf参数写法错误:*buffer[i]属于非法解引用,即使buffer指向合法内存,此处也应该传入元素地址&buffer[i]
  • 代码中用到的error变量未定义,无法通过编译
正确实现方案

你的约束可以通过C99标准的**变长数组(VLA)**实现:无需提前用宏定义固定数组大小,运行时确定长度后直接声明数组,不需要动态内存分配,也不需要引入额外头文件,完全符合你的要求。

正确代码如下:

#include <stdio.h>

void input(int *buffer, int *length);

int main()
{
    int length;
    // 先读取数组长度
    scanf("%d", &length);
    if (length < 0) {
        printf("长度非法\n");
        return 1;
    }
    // 声明变长数组,长度为运行时读取的length值
    int buffer[length];
    input(buffer, &length);

    // 此处可正常使用buffer存储的数组数据,示例打印:
    for (int i = 0; i < length; i++) {
        printf("%d ", buffer[i]);
    }
    return 0;
}

void input(int *buffer, int *length) {
    for (int i = 0; i < *length; i++) {
        scanf("%d", &buffer[i]);
    }
}
注意事项
  • 变长数组分配在栈内存上,输入的长度不要过大,避免栈溢出
  • 若编译时提示变长数组不支持,给编译器加上C99标准参数即可,例如GCC使用编译命令:gcc 源码文件名.c -std=c99

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 21:24:00