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

C语言代码报错求助:数组赋值与参数类型不兼容

问题定位与代码修复

核心错误分析

1. 数组赋值错误

报错error: assignment to expression with array type:
数组变量是不可修改的左值,不能直接用=给整个数组赋值。str_Player函数已经将格式化后的字符串写入你传入的第二个参数数组中,无需再赋值给另一个数组。

2. 参数类型不匹配警告

警告passing argument 2 of 'show_Player' from incompatible pointer type:
show_Player的第二个参数要求是Player*类型,但你传入了char*类型的数组,完全不符合函数定义。

代码修复步骤

步骤1:修正player_test.c的核心错误

  • 移除数组赋值语句,直接将目标数组作为str_Player的第二个参数传入
  • 调用show_Player时传入Player变量的地址&p1,而非字符串数组
  • 替换#include "player.c"为#include "player.h",避免重复定义问题
  • 调整数组大小,确保能容纳格式化后的字符串
  • 替换非标准pause函数为标准库的getchar()

步骤2:修复player.c的潜在问题

  • 定义NAME_SIZE宏,解决未定义标识符错误
  • 优化str_Player的NULL分支,返回合法的字符串指针

步骤3:完善player.h的声明

  • 补充Player结构体的声明和NAME_SIZE宏定义
  • 添加show_Player的函数声明

修正后的完整代码

player.h

#ifndef PLAYER_H
#define PLAYER_H

#define NAME_SIZE 20

typedef struct {
    char name[NAME_SIZE];
    int score;
} Player;

char *str_Player(Player *p, char s[]);
void show_Player(char *s, Player *p);

#endif

player.c

#include <stdio.h>
#include "player.h"

char *str_Player(Player *p, char s[]) {
    if (p != NULL) {
        sprintf(s, "%s %d", p->name, p->score);
        return s;
    } else {
        static char null_str[] = "NULL";
        return null_str;
    }
}

void show_Player(char *s, Player *p) {
    if (p != NULL) {
        printf("%s: %s %d\n", s, p->name, p->score);
    } else {
        printf("%s: NULL\n", s);
    }
}

player_test.c

#include <stdio.h>
#include "player.h"

int main() {
    printf(" %s %s\n", __DATE__, __TIME__);
    printf("\n--------------------------------------------------------------\n"
           "1. str_Player() and show_Player()\n");

    Player p1 = {"Jane", 67};
    char holder[NAME_SIZE + 10];

    str_Player(&p1, holder);
    // 输出Player变量的大小(符合任务要求)
    printf("Size of Player variable: %zu\n", sizeof(p1));
    printf("str_Player result: %s\n", holder);

    show_Player("First Player is", &p1);

    printf("\nPause ... Press Enter to continue\n");
    getchar();

    return 0;
}

额外说明

  • 原代码中sizeof(holder)是求字符串数组的大小,任务要求输出Player变量的大小,因此改为sizeof(p1)
  • 补充了show_Player的函数实现,满足任务展示需求
  • 使用头文件保护机制,避免重复包含导致的编译错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:31:00