zoukankan      html  css  js  c++  java
  • 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 为从参数字符串中取出的子串长度

  • 相关阅读:
    Python(条件判断和循环)
    大端还是小端
    c语言程序设计 字符串拷贝拷贝演变与初衷
    内存 匹配串
    多态 C2
    多态 C1
    判断是否存在不合法字符(C++)
    va_start、vsprintf、va_end
    java中instanceof用法
    c++ vector相关
  • 原文地址:https://www.cnblogs.com/hejing-swust/p/7805431.html
Copyright © 2011-2022 走看看