c语言结构休数据赋值

C语言 码拜 9年前 (2016-04-07) 855次浏览
定义的数据是:
struct ns1__ArrayOfSeat
{
int __sizeSeat; /* sequence of elements <Seat> */
struct ns1__Seat *Seat; /* optional element of type ns1:Seat */
} seats;
struct ns1__Seat
{
char *Name; /* optional element of type xsd:string */
char *IDCard; /* optional element of type xsd:string */
char *Phone; /* optional element of type xsd:string */
};
现在有3组数据 {“测试一”,”0001″,”13505710001″}  {“测试二”,”0002″,”13505710002″}  {“测试三”,”0003″,”13505710003″}
问一下要怎么才能赋值到  seats中?
解决方案

20

简单写了下,可以这样赋值。

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct ns1__ArrayOfSeat
{
	int __sizeSeat;	/* sequence of elements <Seat> */
	struct ns1__Seat *Seat;	/* optional element of type ns1:Seat */
} seats;
struct ns1__Seat
{
	char *Name;	/* optional element of type xsd:string */
	char *IDCard;	/* optional element of type xsd:string */
	char *Phone;	/* optional element of type xsd:string */
};
void main()
{
	seats seatsArray[3] = {0};
	seatsArray[0].Seat = (ns1__Seat *)malloc(sizeof(ns1__Seat));
	seatsArray[1].Seat = (ns1__Seat *)malloc(sizeof(ns1__Seat));
	seatsArray[2].Seat = (ns1__Seat *)malloc(sizeof(ns1__Seat));
	seatsArray[0].Seat->IDCard = "测试1";
	seatsArray[0].Seat->Name = "0001";
	seatsArray[0].Seat->Phone = "13505710001";
	seatsArray[1].Seat->IDCard = "测试2";
	seatsArray[1].Seat->Name = "0002";
	seatsArray[1].Seat->Phone = "13505710002";
	seatsArray[2].Seat->IDCard = "测试3";
	seatsArray[2].Seat->Name = "0003";
	seatsArray[2].Seat->Phone = "13505710003";
	printf("%s\t%s\t%s\n",seatsArray[0].Seat->IDCard,seatsArray[0].Seat->Name,seatsArray[0].Seat->Phone);
	printf("%s\t%s\t%s\n",seatsArray[1].Seat->IDCard,seatsArray[1].Seat->Name,seatsArray[1].Seat->Phone);
	printf("%s\t%s\t%s\n",seatsArray[2].Seat->IDCard,seatsArray[2].Seat->Name,seatsArray[2].Seat->Phone);
}

c语言结构休数据赋值

20

你是要实现一个顺序存储的线性表吗?你可以写一些函数维护这个线性表,例如像下面这样
你还可以添加对应的get函数,delete函数等等

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef struct ns1__ArrayOfSeat
{
int __sizeSeat;	/* sequence of elements <Seat> */
struct ns1__Seat *Seat;	/* optional element of type ns1:Seat */
} Seats;
typedef struct ns1__Seat
{
char *Name;	/* optional element of type xsd:string */
char *IDCard;	/* optional element of type xsd:string */
char *Phone;	/* optional element of type xsd:string */
} Seat;
void seatsInit(Seats *p_seats)
{
	p_seats->__sizeSeat = 0;
	p_seats->Seat = (Seat*)malloc(sizeof(Seat) * 1024);
}
void seatsInsert(Seats *p_seats, Seat *p_seat)
{
	(p_seats->Seat)[p_seats->__sizeSeat++] = *p_seat;
}
void printSeats(Seats *p_seats)
{
	int i = 0;
	for( ; i<p_seats->__sizeSeat; i++)
	{
		printf("%s %s %s\n", (p_seats->Seat[i]).IDCard, (p_seats->Seat[i]).Name, (p_seats->Seat[i]).Phone);
	}
}
void destroySeats(Seats *p_seats)
{
	free(p_seats->Seat);
}
int main()
{
	Seat s1 = {"测试一","0001","13505710001"};
	Seat s2 = {"测试二","0002","13505710002"};
	Seat s3 = {"测试三","0003","13505710003"};
	Seats ss;
	seatsInit(&ss);
	seatsInsert(&ss, &s1);
	seatsInsert(&ss, &s2);
	seatsInsert(&ss, &s3);
	printSeats(&ss);
	destroySeats(&ss);
	getchar();
	return 0;
}

10

定义的同时进行初始化
struct { 
  char *name; 
  int age; 
} stu[2] = { {"jo", 27}, {"y", 30} };
先定义,后初始化,整体赋值
s[1] = (struct stu){23,"hello"}
先定义,后初始化 分开赋值
s[1].age=12; 
strcpy(stu[1].name, "hello");

15

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct ns1__ArrayOfSeat SeatsInfo;
typedef struct ns1__Seat SeatItem;
// 建议用这种方式,或链表的方式。
struct ns1__ArrayOfSeat {
	int __sizeSeat;
	SeatItem __itemSeats[];
};
struct ns1__Seat {
	char *Name;
	char *IDCard;
	char *Phone;
};
int main(void)
{
	SeatsInfo *lpSeats = malloc(sizeof(SeatsInfo) + sizeof(SeatItem) * 3);
	if (lpSeats != NULL)
	{
		// 分配内存
		lpSeats->__sizeSeat = 3;
		// 假如赋值来自于字符串常量,那么请直接给指针赋值即可。
		// 一般来说,这些值都是从其他地方读取,或参数传递等。
		// 假如赋值来自于参数或文件,必须用 strdup,最终必须释放。
		lpSeats->__itemSeats[0].Name = strdup("测试一");
		lpSeats->__itemSeats[0].IDCard = strdup("0001");
		lpSeats->__itemSeats[0].Phone = strdup("13505710001");
		lpSeats->__itemSeats[1].Name = strdup("测试二");
		lpSeats->__itemSeats[1].IDCard = strdup("0002");
		lpSeats->__itemSeats[1].Phone = strdup("13505710002");
		lpSeats->__itemSeats[2].Name = strdup("测试三");
		lpSeats->__itemSeats[2].IDCard = strdup("0003","");
		lpSeats->__itemSeats[2].Phone = strdup("13505710003");
		// 释放内存
		for (int i = 0; i < lpSeats->__sizeSeat; i++)
		{
			char *lpName = lpSeats->__itemSeats[i].Name;
			if (lpName != NULL)
			{
				free(lpName);
			}
			char *lpIdCard = lpSeats->__itemSeats[i].IDCard;
			if (lpIdCard != NULL)
			{
				free(lpIdCard);
			}
			char *lpPhone = lpSeats->__itemSeats[i].Phone;
			if (lpPhone != NULL)
			{
				free(lpPhone);
			}
		}
		free(lpSeats);
	}
	return 0;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c语言结构休数据赋值
喜欢 (0)
[1034331897@qq.com]
分享 (0)