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 為從參數字符串中取出的子串長度