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 为从参数字符串中取出的子串长度

转载于:https://www.cnblogs.com/hejing-swust/p/7805431.html

  • 1
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值