Standardverhalten von PuTTY beim Empfang des Nullzeichens '\0'

Standardverhalten von PuTTY beim Empfang des Nullzeichens '\0'

Ich untersuche ein unerwartetes Verhalten bei einer Terminalausgabe im Zusammenhang mit dem Empfang eines Nullzeichens „\0“. Ich sende eine Zeichenfolge, von der ich erwarte, dass sie 2 \0 enthält, aber dies wird in PuTTY nicht angezeigt.

Entsprechenddiese FrageEs wird vorausgesetzt, dass PuTTY unter normalen Umständen keine Null sendet. Diese Frage ist jedoch fast 10 Jahre alt und ich würde davon ausgehen, dass PuTTY in dieser Zeit Updates erhalten hat.

Ich habe mir diePuTTY-Benutzerhandbuchund habe hauptsächlich Dokumentationen zu den Panels von PuTTY und viel zu Fehlermeldungen und Konnektivität gefunden.Kapitel 3.3behandelt das Thema "Ändern der Zeichensatzkonfiguration", befasst sich aber hauptsächlich mit nicht-lateinischen Alphabeten und verweist aufKapitel 4.10, das ist das Übersetzungsfenster.

Meine Frage ist einfach:was macht PuTTY normalerweise, wenn es ein \0-Zeichen empfangen muss? Empfängt es es nicht? Empfängt es das Zeichen, wird aber nicht im Terminal angezeigt?

Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

Der zum Senden von Daten an PuTTY verwendete Code ist in C auf einer STM32-Karte:

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 


verwandte Informationen