C语言 结构体的赋值测试

C语言 变成,在编程过程中,有时需要给结构体赋一个值,我想采用下面的这种赋值方式,但是总是出错,又不知道错在哪里,这个不是初始化,在定义了结构体之后,顺带赋一个值,从而初始化,这个我是知道的。

#include <stdio.h>

#include <stdlib.h>

#define  NUM  50

struct film

{
    char name[NUM];  //电影的名称 
    
    int  score;   //电影的评分    
};

typedef film FILM; 

int main(void)

{
    
    FILM  movie;
    
    movie = {"GoldedFather",10};
    
    printf("the name is %s and the score is %d .\n",movie.name,movie.score);
    
    return 0;
    
}

编译过程中,总是 说 movie = {"GoldedFather",10}; 这一行有错误,

img

请问  错在了 哪里  ,该如何修改?  程序中  到底该怎样给  结构体 赋值?  谢谢!

typedef struct FILM movie;

没法这样赋值的,或者你在初始化的时候可以这样赋值.
初始化以后只能

strcpy(movie.name,"GoldedFather");
movie.score=10;

首先 我直接再vs2019上运行你的代码是可以运行成功的。

img


其次,就是分析了,为什么我的会成功,你的不成功,以及提示operator=是什么。
不知道你有没有接触过构造函数,以及赋值构造函数的概念,以及在结构体内部,可以自己写函数,构造函数,或者重载一些其他符号。
你试试,你如果直接FILM movie = { "GoldedFather",10 }; 应该是可以成功的,为啥呢? 这里就是默认构造函数,赋值构造函数,复制构造函数的知识点。
上面的方式调用的应该是构造函数,而如果分开写FILM movie ; 然后 movie = { "GoldedFather",10 },实际上是先初始化(默认构造哈桑农户)了一个对象 movie,然后给这个用赋值拷贝构造函数的方式赋值(也就是这里的重载赋值符号,operator =的实现),而注意,结构体内部有c字符串,这样会对吗? 只有编译器实现这个operator =才会编译成功,或者你可以自己试试。

你可以百度构造函数,赋值构造函数,复制构造函数,以及相关的实现方法,重载等号的知识点,我是懒得写代码了,网上比较多~

改这样

#include <stdio.h>
 
#include <stdlib.h>
 
#define  NUM  50
 
typedef struct film
 
{
    char name[NUM];  //电影的名称 
    
    int  score;   //电影的评分    
}FILM;
 
//typedef film FILM; 
 
int main(void)
 
{
    
    FILM  movie= {"GoldedFather",10};
    
   // movie = {"GoldedFather",10};
    
    printf("the name is %s and the score is %d .\n",movie.name,movie.score);
    
    return 0;
    
}
 

结构体的字符数组如果用等号,可以在定义的时候赋初始值:
char name[NUM] = "GoldedFather";
但是不能用“=”直接为字符数组直接赋值,可以写成:
movie = {{"GoldedFather"},10};
也可以用strcpy函数复制字符串:
strcpy(movie.name, "GoldedFather");

了解下 typedef 的用法就好了。

供参考:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define  NUM  50
struct film
{
    char name[NUM];  //电影的名称 
    int  score;   //电影的评分    
};
typedef struct film  FILM; //typedef film FILM;
int main(void)
{
    FILM  movie;// = { "GoldedFather",10 };
    strcpy(movie.name, "GoldedFather"); movie.score = 10;
    printf("the name is %s and the score is %d .\n", movie.name, movie.score);
    return 0;
}

结构体字符串不能这样直接赋值,你必须用strcpy对它进行赋值

move.name="xxxx"

typedef struct FILM movie;