C语言结构体数组内带字符数组初始化和赋值
1.首先定义结构体数组:
typedef struct BleAndTspRmtCmd{
char terminal[3];
char note[3];
char rmtCmd[10];
char cmdPropt[24];
};
BleAndTspRmtCmd为结构体名,可以通过这个结构体名定义其他结构体变量,struct BleAndTspRmtCmd variable;
或者定义结构体数组变量,struct BleAndTspRmtCmd variable[];
2.或者定义全局结构体变量,
typedef struct {
char terminal[3];
char note[3];
char rmtCmd[10];
char cmdPropt[24];
}BleAndTspRmtCmd;
然后根据这个结构体变量定义其他结构体变量,BleAndTspRmtCmd variable;或者数组变量BleAndTspRmtCmd variable[];
3.初始化结构体方法:
方法一:定义结构体数组变量的时候直接初始化(赋值),因为结构体内变量为字符数组,也就相当于字符串指针,这是字符数组的特殊性。
struct BleAndTspRmtCmd myRmdCmdSet[28] = {{"XX", "XX", "XX", "XX"}, {"XX", "XX", "XX", "XX"}......}
方法二:先定义结构体数组,后面再赋值。
struct BleAndTspRmtCmd myRmdCmdSet[] = {NULL};
这种赋值方式分两种,目前我已经验证成功的:
先赋值临时变量;
int index = 0;
char node_temp[4] = "XX";
char terminal_temp[4] = "XX";
char rmtCmd_temp[11] = "XX";
char cmdPropt_temp[24] = "XX";
然后再将临时变量赋值给结构体数组变量,遍历:
第一:strcpy,拷贝临时字符数组变量;
for (; index < 28; index ++)
{
strcpy(myRmdCmdSet[index].terminal, terminal_temp);
strcpy(myRmdCmdSet[index].note, node_temp);
strcpy(myRmdCmdSet[index].rmtCmd, rmtCmd_temp);
strcpy(myRmdCmdSet[index].cmdPropt, cmdPropt_temp);
}
第二:memcpy,与第一种类似,只是函数不一样;
for (; index < 28; index ++)
{
memcpy(myRmdCmdSet[index].terminal, terminal_temp, sizeof(terminal_temp));
memcpy(myRmdCmdSet[index].note, node_temp, sizeof(node_temp));
memcpy(myRmdCmdSet[index].rmtCmd, rmtCmd_temp, sizeof(rmtCmd_temp));
memcpy(myRmdCmdSet[index].cmdPropt, cmdPropt_temp, sizeof(cmdPropt_temp));
}
此时就完成了结构体数组变量的赋值。
注意,由于结构体内的变量都是字符数组,相当于指针,他们都指向结构体对应的地址,输出时就会输出指向的地址开始的值,直到该结构体完。
要想输出正确的值,printf必须进行截取和对齐。
原样输出字符串:
printf("%s", str);
2. 输出指定长度的字符串, 超长时不截断, 不足时右对齐:
printf("%Ns", str); --N 为指定长度的10进制数值
3. 输出指定长度的字符串, 超长时不截断, 不足时左对齐:
printf("%-Ns", str); --N 为指定长度的10进制数值
4. 输出指定长度的字符串, 超长时截断, 不足时右对齐:
printf("%N.Ms", str); --N 为最终的字符串输出长度
--M 为从参数字符串中取出的子串长度
5. 输出指定长度的字符串, 超长时截断, 不足时左对齐是:
printf("%-N.Ms", str); --N 为最终的字符串输出长度
--M 为从参数字符串中取出的子串长度
C语言结构体数组内带字符数组初始化和赋值的更多相关文章
- C语言 结构体中的零长度数组
/* C语言零长度数组大小和取值问题 */ #include <stdio.h> #include <stdlib.h> #include <string.h> s ...
- c语言结构体中的一个char数组怎么赋值?
目录 前景提示 这里的结构体处理的步骤 一.char数组类型的处理 二.char数组指针类型的处理 三.全部代码 1. char数组 2. char数组指针 结语 前景提示 定义一个结构体,结构体中有 ...
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
原文链接:C语言结构体里的成员数组和指针 复制例如以下: 单看这文章的标题,你可能会认为好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Lar ...
- 06. Go 语言结构体
Go语言结构体(struct) Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. Go 语言中的类 ...
- Linux C语言结构体-学习笔记
Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...
- 【嵌入式开发】C语言 结构体相关 的 函数 指针 数组
. 作者 : 万境绝尘 转载请注明出处 : http://www.hanshuliang.com/?post=30 . 结构体概述 : 结构体是 多个 变量的集合, 变量的类型可以不同; -- 可进行 ...
- Go 语言 结构体和方法
@ 目录 1. 结构体别名定义 2. 工厂模式 3. Tag 原信息 4. 匿名字段 5. 方法 1. 结构体别名定义 变量别名定义 package main import "fmt&quo ...
- c语言结构体
[C语言]21-结构体 本文目录 一.什么是结构体 二.结构体的定义 三.结构体变量的定义 四.结构体的注意点 五.结构体的初始化 六.结构体的使用 七.结构体数组 八.结构体作为函数参数 九.指向结 ...
- 浅谈c语言结构体
对于很多非计算机专业来说,c语言课程基本上指针都不怎么讲,更别说后面的结构体了.这造成很多学生对结构体的不熟悉.这里我就浅谈一下我对结构体的认识. 结构体,就是我们自己定义出一种新的类型,定义好之后, ...
随机推荐
- GBDT--简单理解
梳理 1.Model Ensemble 能够分为三大类:Bagging,Boosting. Stacking. 2.Boosting能够说是一个思想(框架),而Adaboost等算法仅仅是其一个子类, ...
- struts2 接口如何接收客户端提交的json数据
struts2 接口如何接收客户端提交的json数据 CreationTime--2018年6月20日15点54分 Author:Marydon 1.情景还原 使用struts2写的接口(服务端) ...
- 一个好用的短连接服务,mark备用
http://to.ly/api.php? longurl=http://www.example.com 当中http://www.example.com 是你所须要转换的长链接地址.经过一个简单的g ...
- sencha touch结合webservice读取jsonp数据详解
sencha touch读取jsonp数据主要依靠Ext.data.JsonP组件,在mvc的store文件中定义代码如下: Ext.define('eparkapp.store.ParksNearb ...
- androidstudio新建项目中在布局文件中不显示title的方法
在androidstudio新建项目的时候,在布局文件里有时候会出现如下情况: 上面的标题栏非常碍眼,要想隐藏标题栏的话,可以在Manifest文件的theme标签里进行配置,自定义一个theme,加 ...
- CSS3 稳固而知新: 居中
水平居中 transform: translateX(-50%); left: 50%; 垂直居中同理 transform: translateY(-50%); top:50%; 垂直水平 ...
- 图片懒加载lazyload.js详解
简介 lazyload.js用于长页面图片的延迟加载,视口外的图片会在窗口滚动到它的位置时再进行加载,这是与预加载相反的. 优点 它可以提高页面加载速度: 在某些情况清晰它也可以帮助减少服务器负载. ...
- 免费开源C# 论坛
http://stackoverflow.com/questions/255591/who-knows-a-good-free-open-source-forum-in-c 1. http://yet ...
- MSP430WARE++的使用3:modbus模块的调用方法
MSP430WARE++的使用3:modbus模块的调用方法 MSP430WARE是一套基于C++语言的开源的MSP430层次化软件架构,支持多种外设. 本文将介绍modbus模块驱动程序的调 ...
- 设置一个label显示多种颜色,多种字体大小
UILabel* label = [[UILabel alloc] init]; label.frame = CGRectMake(0, 100, 200, 100); label.textColor ...