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

C语言可变长度字符串数组使用strcpy出现段错误问题排查

问题根因
  • 你在main中定义的char array[n][300]是二维char数组(变长数组VLA),每个元素是长度为300的char数组;但addWords函数的形参定义为char *array[][300],这是二维char指针数组,两种类型完全不匹配。传参后函数内部访问array[x]时会把数组里的字符值当做指针地址解析,访问非法内存直接触发段错误。
  • 原代码没有引入<stdio.h>、<string.h>头文件,部分编译器会默认做隐含函数声明,也会导致运行行为异常。
修复方案

修改函数形参类型,和传入的二维数组类型匹配即可,修复后完整代码如下:

#include <stdio.h>
#include <string.h>

// 形参改为指向长度300的char数组的指针,和二维数组传参类型匹配
void addWords(char array[][300], int n) {
    char p[] = "Hello ";
    char p1[] = "World ";
    char p2[] = "!";

    strcpy(array[0],p);
    strcpy(array[1],p1);
    strcpy(array[2],p2);

    printf("%s%s%s\n",array[0],array[1],array[2]);
}


int main(int argc, char const *argv[])
{
    int n = 3;
    char array[n][300];

    addWords(array,3);

    return 0;
}
额外注意事项
  • 若要适配任意n的使用场景,需要在函数内部做边界校验,避免写入超过n个元素触发数组越界。
  • 建议使用strncpy替代strcpy,指定最大拷贝长度为299(预留末尾\0的存储位置),避免待拷贝的字符串过长溢出数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:54:06