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

C语言如何向结构体实现的列表存入字符串?对应代码运行报错如何解决?

问题分析
  • 函数参数类型不匹配:inserir 函数声明和定义的第二个参数是 char 类型(单字符),但调用时传入的是字符串常量 "Fabio",本质是 const char* 类型的字符串指针,类型完全不匹配。
  • strcpy 函数参数顺序颠倒且参数类型错误:strcpy 的标准用法是 strcpy(目标缓冲区, 源字符串),你的代码里不仅把源和目标写反了,还错误传入了单字符变量 ch 的地址作为操作对象。
  • 语法错误:原有代码中 strcpy 调用行缺少右括号,不符合C语言语法要求。
修复方案

第一步:修改 lista.h 中的函数声明

把 inserir 函数的第二个参数修改为字符串指针类型:

// 替换原有声明 void inserir(LISTA* l, char ch);
void inserir(LISTA* l, const char* nome);

第二步:修改 lista.c 中的函数实现

修正参数类型、strcpy 调用逻辑,可额外用 strncpy 避免字符串过长导致的缓冲区溢出问题:

void inserir(LISTA* l, const char* nome){
    int i = l->qtdElemen;
    if(l->qtdElemen == MAX) return;
    // 最多复制49个字符,留出结尾的'\0'位置
    strncpy(l->A[i].nome, nome, sizeof(l->A[i].nome) - 1);
    l->A[i].nome[sizeof(l->A[i].nome) - 1] = '\0'; // 强制补全字符串结束符
    l->qtdElemen++;
    return;
}

修改完成后重新编译即可正常将姓名存入列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:06:01