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

结构体指针与->运算符问题:let_comment函数编译报错求助

问题分析与解决

错误根源

  1. 数组访问错误:MOVIE结构体里的comments是长度为50的COMMENT数组,f->comments是数组首地址,不是单个COMMENT对象,不能直接用.text访问成员,必须指定具体数组索引(比如f->comments[0]表示第一条评论)。
  2. 字符串赋值错误:C语言中char数组无法直接用=赋值,必须用strcpy函数完成字符串复制,且需要引入<string.h>头文件。
  3. 函数参数缺失:原let_comment函数没有指定要添加到哪条评论的位置,需要补充索引参数或在函数内部查找空评论位置。

修正后的代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>  // 引入strcpy所需头文件

typedef struct comment {char text[256], name[64];} COMMENT;
typedef struct movie {char name[64]; double mark; COMMENT comments[50];} MOVIE;

// 新增index参数,指定评论在数组中的位置
int let_comment(MOVIE *f, int index, char *text, char *name);

int main()
{
    MOVIE *p_movie;
    char text1[256], name1[64];
    char *p_text = text1, *p_name = name1;

    // 内存分配失败检查
    p_movie = (MOVIE*)malloc(5 * sizeof(MOVIE));
    if (!p_movie) {
        perror("malloc failed");
        return 1;
    }

    printf("Input movie data:\n");
    for(int i = 0; i < 5; i++)
    {
        printf("Name: ");
        scanf("%s", (p_movie + i)->name);
        (p_movie + i)->mark = 0.0;  // 初始化评分字段
    }

    // 为每个电影添加第一条评论(索引0)
    for(int i = 0; i < 5; i++) {
        let_comment(p_movie + i, 0, p_text, p_name);
    }

    // 验证结果:打印第一个电影的第一条评论
    printf("\nFirst movie's first comment:\n");
    printf("Text: %s\n", p_movie->comments[0].text);
    printf("Author: %s\n", p_movie->comments[0].name);

    free(p_movie);  // 释放内存,避免泄漏
    return 0;
}

int let_comment(MOVIE *f, int index, char *text, char *name)
{
    // 检查索引合法性
    if (index < 0 || index >= 50) {
        printf("Invalid comment index\n");
        return -1;
    }

    printf("Input comment: ");
    scanf("%s", text);
    printf("Comment editor: ");
    scanf("%s", name);

    // 用strcpy完成字符串复制
    strcpy(f->comments[index].text, text);
    strcpy(f->comments[index].name, name); 

    return 0;
}

核心修改说明

  • 引入<string.h>头文件,使用strcpy替代直接赋值操作,符合C语言字符串处理规则。
  • 给let_comment增加index参数,明确指定评论要存入数组的位置。
  • 修改成员访问方式:通过f->comments[index].text定位到具体评论对象后,再访问其成员字段。
  • 补充内存分配失败检查和内存释放逻辑,提升代码健壮性。
  • 初始化电影评分字段,避免未定义值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:55:26