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

