不兼容的指针类型将“size_t *”(又名“unsigned long *”)传递给类型为“int *”的参数[-Wincompatible-pointer-types]

ykejflvf  于 2023-03-28  发布在  其他
关注(0)|答案(2)|浏览(118)

我正在做一个电影分级管理程序。我声明了size_t作为要计数的数据类型,但是我得到了这个错误。你怎么了?

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[], int *ptr_n_items){ 

    for (int n = 0; n < num; ++n){
        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);

我不知道怎么解决这个错误。告诉我怎么做。

yr9zkbsy

yr9zkbsy1#

问题是你给一个需要int*的函数提供了一个size_t*。你需要做以下之一

  • size_t n_items = 0;更改为
int n_items = 0;
  • 将函数更改为
void read_file(struct movie movie_list[], size_t *ptr_n_items)

老师的建议是使用size_t s,所以我建议使用上面的第二个修改。

kmbjn2e3

kmbjn2e32#

size_t n_items = 0;

read_file(movie_list, &n_items);

read_file()被传递一个指向size_tsize_t *的指针,但它需要一个指向intint *的指针。
n_items的类型更改为int(不推荐):

// size_t n_items = 0;
int n_items = 0;

或者更改read_file()的第二个参数以接受size_t *

// void read_file(struct movie movie_list[], int *ptr_n_items)
void read_file(struct movie movie_list[], size_t *ptr_n_items)

相关问题