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

电影评分管理程序size_t与int指针类型不兼容错误的解决

解决指针类型不兼容错误的方案

错误原因很明确:你在main里传递的是size_t*类型的指针(&n_items),但read_file函数的第二个参数定义为int*,两种指针类型不匹配,触发编译器警告。

方案1:统一使用size_t类型(推荐)

既然选择用size_t做计数(这更符合C语言处理对象数量的标准习惯),直接把read_file的参数类型改成size_t*,同步调整函数内相关用法:

修改后的代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#define LMAX 100 // 需自行定义合适的数组大小
struct movie {
    char title[100];
    float rating;
};

int main(){
    struct movie movie_list[LMAX];
    size_t n_items = 0;

    read_file(movie_list, &n_items);
}

void read_file(struct movie movie_list[], size_t *ptr_n_items){ 
    // 补充文件打开逻辑,需替换为你的实际文件路径
    FILE *file = fopen("movies.txt", "r");
    if (!file) {
        perror("Failed to open file");
        exit(1);
    }
    int num = 5; // 示例值,实际需从文件或其他合法渠道获取条目数

    for (size_t n = 0; n < num; ++n){ // 循环变量同步改为size_t,避免类型匹配警告
        if (fscanf(file, "%[^\n]%*c", movie_list[*ptr_n_items].title) != 1 || 
            fscanf(file, "%f%*c", &movie_list[*ptr_n_items].rating) != 1){
            printf("ERROR: Wrong file format.\n");
            exit(1);
        }
        *ptr_n_items += 1;
    }

    assert(*ptr_n_items == num);
    fclose(file); // 记得关闭文件
}

方案2:临时类型转换(不推荐,仅应急)

如果暂时不想修改函数参数类型,可在调用时做强制类型转换,但这种方式会隐藏类型不匹配风险,若size_t值超出int取值范围,会导致数据截断:

read_file(movie_list, (int*)&n_items);

不建议使用此方案,size_t是无符号类型,int是有符号类型,取值范围差异可能引发潜在bug。

额外注意事项

  • 原代码中num和file未定义,需补充文件打开逻辑和num的合法来源(比如从文件头读取条目数,或作为参数传入函数)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:13:18