C语言只有在定义字符数组的时候才能用“=”来初始化变量,其它情况下是不能直接用“=”来为字符数组赋值的,要为字符数组赋值可以用string.h头文件中的strcpy函数来完成。
例如:
char a[10] = "123"; /*正确,在定义的时候初始化*/
char a[10];
a = "123"; /*错误,不能用“=”直接为字符数组赋值*/
strcpy(a, "123"); /*正确,使用strcpy函数复制字符串*/
所以要对game[0][0].cpart赋值应该用strcpy(game[0][0].cpart, "123");才对。
注意要使用strcpy函数要用#include <string.h>包含string.h头文件。
给C语言结构体中的char数组赋值有两种方式:
1、在声明结构体变量时赋值:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct stu{
int x;
char name[10];
};
int main(void){
struct stu s={8,"123"};//这样初始化
printf("%d %s\n",s.x,s.name);
return 0;
}
2、向数组直接拷贝字符串:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct stu{
int x;
char name[10];
};
int main(void){
struct stu s;
strcpy(s.name,"abcd");//向name拷贝字符串
s.x=128;
printf("%d %s\n",s.x,s.name);
return 0;
}
有指针成员的结构体赋值
通常情况下,稍微复杂一点的结构体里面会有指针成员,如果struct中有指针成员,那么结构体赋值不能简单的直接复制了,而需要为指针成员另外分配内存,并将数据拷贝过去
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct MyStruct
{
int a;
int b;
char* c;
};
int main()
{
struct MyStruct t1;
t1.a = 1;
t1.b = 2;
// 为指针区域赋值
char *p = (char*)malloc(10*sizeof(char));
strcpy(p, "hello");
t1.c = p;
struct MyStruct t2;
// 各个成员分别赋值,可以进行封装
t2.a = t1.a;
t2.b = t1.b;
char *p2 = (char*)malloc(10*sizeof(char));
strcpy(p2, t1.c);
t2.c = p2;
printf("MyStruct t1: %d, %d, %s\n", t1.a, t1.b, t1.c);
// 释放了t1的内存
free(p);
printf("MyStruct t2: %d, %d, %s\n", t2.a, t2.b, t2.c);
// 释放了t2的内存
free(p2);
printf("t1 pointer addr: %p\n", t1.c);
printf("t2 pointer addr: %p\n", t2.c);
return 0;
/*
MyStruct t1: 1, 2, hello
MyStruct t2: 1, 2, hello
t1 pointer addr: 0x6000284d0
t2 pointer addr: 0x600062e10 */
}
参考博客:
https://blog.csdn.net/ginwafts/article/details/80858232
https://blog.csdn.net/chenzhen1080/article/details/83239743