c语言字符结构数组初始化,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 为从参数字符串中取出的子串长度

相关推荐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值