title: dynamic char array sizing
body: <p>In my application, I have a char array defined which can take one of three options: "okay", "high", "low" which are then sent down a serial port to a remote device.  I currently have the array sized to take the 4 character words plus carriage return and line feed, but when I have to send "low" I get a null character in the strings, which I am concerned would confuse the host terminal.</p>
  
  <p>array definition</p>
  
  <pre><code>char mod1_status_char[6] = {'0','0','0','0','0','0'};     
  char mod2_status_char[6] = {'0','0','0','0','0','0'};     
  char mod3_status_char[6] = {'0','0','0','0','0','0'};     
  </code></pre>
  
  <p>sample of switch case statement:</p>
  
  <pre><code>void DCOKStatus(uint8_t *ptr_status)
  {
      uint8_t status = *ptr_status;
  
      switch (status) 
      {
          case 0x00:
              strcpy(mod1_status_char, "okay");
              strcpy(mod2_status_char, "okay");
              strcpy(mod3_status_char, "okay");
              break; 
          case 0x10:
              strcpy(mod1_status_char, "okay");
              strcpy(mod2_status_char, "okay");
              strcpy(mod3_status_char, "low");
              break;
       }
  </code></pre>
  
  <p>This is the struct which makes the message string to send</p>
  
  <pre><code>    strcpy(MsgStatus_on.descriptor_msg, "$psu_");
      MsgStatus_on.address01 = hex_addr[0];
      MsgStatus_on.address02 = hex_addr[1];
      MsgStatus_on.space01 = 0x20;
      strcpy(MsgStatus_on.cmdmsg01, "op_en op1_");
      strcpy(MsgStatus_on.statusmsg01, mod1_status_char);
      MsgStatus_on.space02 = 0x20;
      strcpy(MsgStatus_on.cmdmsg02, "op2_");
      strcpy(MsgStatus_on.statusmsg02, mod2_status_char);
      MsgStatus_on.space03 = 0x20;
      strcpy(MsgStatus_on.cmdmsg03, "op3_");
      strcpy(MsgStatus_on.statusmsg03, mod3_status_char);
      MsgStatus_on.CR = 0x0D;
      MsgStatus_on.LF = 0x0A;
  </code></pre>
  
  <p>and this sends the message</p>
  
  <pre><code>void USARTWrite(char *object, uint32_t size)
  {    
      GPIO_SetBits(GPIOB, GPIO_Pin_1);
  
      char *byte;
      for (byte = object; size--; ++byte)                                                                       
      {                                       
            USART_SendData(USART1,*byte);                                 
  
      }
  </code></pre>
  
  <p>Would anyone be able to suggest a good approach to dynamically size the array to one character shorter when I need to send "low"?</p>
  
  <p>Thanks</p>