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
相关产品推荐
相关产品推荐

