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语言课程基本上指针都不怎么讲,更别说后面的结构体了.这造成很多学生对结构体的不熟悉.这里我就浅谈一下我对结构体的认识. 结构体,就是我们自己定义出一种新的类型,定义好之后, ...
随机推荐
- (二)Linux——Linux常用指令
1. 文件目录操作命令 ls 显示文件和目录列表 -l 列出文件的详细信息 -a 列出当前目录所有文件,包含隐藏文件 mkdir 创建目录 -p 父目录不存在情况下先生成父目录 cd 切换目录 ...
- jQuery校验 表单验证
官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery plugin: Validation 使用说明 转载 ...
- Linux----LVM扩容磁盘空间(讲的也很好)
转:https://www.cnblogs.com/tail-f/p/6143085.html
- Atitit.eclipse comment template注释模板
Atitit.eclipse comment template注释模板 1. Code templet1 1.1. Settpath1 1.2. 设置存储1 1.3. 导出设置1 2. Java d ...
- Windows GDI 映射模式(出自:Windows程序设计第5版-珍藏版)
GDI映射模式(mapping mode):和映射模式紧密相关的还有4个其它的设备环境属性:1.窗口原点(window origin)2.视口原点(viewport origin)3.窗口范围(win ...
- Win7安装.Net framework 3.5时出错的某解决办法
情况: Win7卸载了.Net Framework 3.5后, 做了些盘符的Symlink操作, 将一些大文件从C盘移到D盘. 再次安装.Net 3.5时, 怎么都装不上, 直接下载离线安装包, 一装 ...
- backtrace、backtrace_symbols
参考: http://www.th7.cn/Program/cp/201308/145700.shtml http://linux.die.net/man/3/backtrace http://man ...
- imx6背光驱动调试
1.内核配置pwm背光驱动make menuconfig:Device Driver ---> Graphics support ---> [*] Backlight & LCD ...
- 放苹果(整数划分变形题 水)poj1664
问题:把M个相同的苹果放在N个相同的盘子里.同意有的盘子空着不放,问共同拥有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 例子 : 1 7 3 ---------------8 ...
- All in All - poj 1936 (子串)
字符串子序列查找问题,设置两个指针,一个指向子序列,另一个指向待查找的序列,查找个字符串一次即可判断. #include <iostream> #include <string. ...