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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM