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

如何修复C语言中char结构体指针赋值的类型不兼容报错

问题原因

你遇到的报错是指针类型不匹配导致的,核心问题是混淆了数组首元素地址和整个数组的地址的类型差异:

  • 结构体中equipa1是长度为10的char数组,直接写games[0].equipa1时,数组名会隐式转换为首元素的地址,类型是char *,和你要赋值的venc、ptrw的类型完全匹配
  • 你加了&之后&games[0].equipa1的类型变成了char (*)[10],也就是指向长度为10的char数组的指针,和char *是完全不同的指针类型,因此触发类型不兼容报错。
解决方案

只需要修改报错片段里的两行代码,去掉多余的取地址符&即可:

if (games[0].mapas1 > games[0].mapas2)
{
  // 原错误写法 games[0].venc = &games[0].equipa1; 去掉&即可
  games[0].venc = games[0].equipa1;
  strcpy(games[4].equipa1, games[0].venc);
  // 原错误写法 char *ptrw = &games[0].equipa1; 去掉&即可
  char *ptrw = games[0].equipa1;
  for (i = 0; i < 5; i++)
  {
    for (j = 0; j < 10; j++)
    {
      if (strcmp(games[i].jog1, eq[0].jogadores[j].nome) == 0)
      {
        eq[0].jogadores[j].rating = eq[0].jogadores[j].rating + 0.3;
      }
      if (strcmp(games[i].jog1, eq[1].jogadores[j].nome) == 0)
      {
        eq[1].jogadores[j].rating = eq[1].jogadores[j].rating - 0.2;
      }
    }
  }
}
额外注意

当前写法中venc是直接指向equipa1的内存空间,后续如果修改了games[0].equipa1的内容,venc指向的内容也会同步变化。如果需要venc存储独立的字符串,可以主动申请堆内存再拷贝内容:

games[0].venc = malloc(10);
if (games[0].venc != NULL) {
    strcpy(games[0].venc, games[0].equipa1);
}
// 程序退出前不需要使用时,记得调用free(games[0].venc)释放内存避免泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 17:51:04