(转)结构体赋值的问题

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章