ヌル文字 '\0' を受信したときの PuTTY のデフォルトの動作

ヌル文字 '\0' を受信したときの PuTTY のデフォルトの動作

端末出力でヌル文字 '\0' を受信する際の予期しない動作について調査しています。2 つの \0 が含まれると予想される文字列を送信していますが、これは PuTTY には表示されません。

によるとこの質問PuTTY は通常の状況では null を送信しないことが示唆されています。ただし、この質問は 10 年近く前のものであり、その間に PuTTY は更新を受けているものと想定します。

私は調べたPuTTY ユーザーマニュアル主に PuTTY のパネルに関するドキュメントと、エラー メッセージや接続に関するドキュメントが多数見つかりました。第3.3章「文字セットの設定の変更」について説明していますが、主に非ラテンアルファベットに関するもので、第4.10章、翻訳パネルです。

私の質問は単純です、PuTTY は、\0 文字を受け取る必要があるときに通常何を行いますか? 受信しないのですか? 文字は受信しますが、ターミナルには表示されませんか?

さらに詳しい情報が必要な場合はお知らせください。

PuTTY にデータを送信するために使用されるコードは、STM32 ボード上の C です。

static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
  /* USER CODE BEGIN 6 */
  USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
  USBD_CDC_ReceivePacket(&hUsbDeviceFS);

  memset (buffer, '\0', 64);  // clear the buffer
  uint8_t len = (uint8_t)*Len;  //Converts Len as uint32_t to len as uint8_t
  memcpy(buffer, Buf, len);  // copy the data to the buffer
  memset(Buf, '\0', len);   // clear the Buf also
  //Code used to send message back

  /*In the full version, there will be another function outside of this file.
   * The buffer will be processed and a proper message will be sent.
   * Check that other file to see how it gets processed when we eventually implement it.
   */

  uint8_t transmit_message[64] = "TOWST_FIRMV_REEEEEEE_27\r\n"; //Do we have \r\n?
  //CDC_Transmit_FS(transmit_message, sizeof(transmit_message));
  //HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_10);
  //message_Received(buffer, len);
  process_Message(buffer, len);
  return (USBD_OK);
  /* USER CODE END 6 */
}

void process_Message(uint8_t* message, uint16_t Len){
    HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_10);
    uint8_t* inputCmd[5];
    uint8_t* inputMessage[8];
    uint8_t outputCmd[5];
    uint8_t outputData[8];

//  strcpy((char*) inputCmd, (const char*)message + COMMAND_CHAR);
//  strcpy((char*) inputMessage, (const char*)message + DATA_CHAR);
    if (strcmp(inputCmd, "FIRMV") == 0){
        memcpy(outputCmd, "FIRMV", COMMAND_LENGTH);
        memcpy(outputData, "01050A00", DATA_LENGTH);
    }
    else{
        memcpy(outputCmd, "REEEE", COMMAND_LENGTH);
        memcpy(outputData, "99999999", DATA_LENGTH);
    }

//  message_Received(message, Len);
    send_Message(outputCmd, outputData);
}

void send_Message(uint8_t* cmd, uint8_t* data){
    uint8_t outputMessage[25] = "TOWST_";  //Size of array is for future uses.
    strncpy((char*) outputMessage + 8, "FIRMV", 5);
    CDC_Transmit_FS(outputMessage, sizeof(outputMessage));
}

    //Expected output: 'TOWST_\0\0FIRMV' based on this post, which per my understanding suggests that strncpy will fill in unfilled memory with null chars. https://aticleworld.com/how-to-use-strncpy-and-how-to-write-your-own-strncpy 


関連情報