C語言結構體數組內帶字元數組初始化和賦值

來源:互聯網
上載者:User

標籤:and   null   nap   輸出   指標   set   str   完成   note   

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語言結構體數組內帶字元數組初始化和賦值

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.