Сравните memcpy со строковым литералом? С

net_buffer_t  netBuffer = nb_create(fd, MAX_LINE_LENGTH);
  char byteArray[MAX_LINE_LENGTH] = "";
  char commandString[COMMAND_LENGTH] = "";

  nb_read_line(netBuffer, byteArray);
  memcpy(commandString, byteArray, COMMAND_LENGTH);
  commandString[COMMAND_LENGTH] = '\0';

  printf("%d\n", strcmp(commandString, "HELO"));

  if(strcmp(commandString, "HELO") == 0){
    printf("%s\n", "got HELO!");
  }else if(strcmp(commandString, "MAIL") == 0){
    printf("%s\n", "You got mail");
  }else if(strcmp(commandString, "RCPT") == 0){

  }else if(strcmp(commandString, "DATA") == 0){

  }else if(strcmp(commandString, "NOOP") == 0){

  }else if(strcmp(commandString, "QUIT") == 0){

  }

Так что мой код должен читать из потока, а затем сравнивать, но по какой-то причине, когда я набираю "HELO" и printf("%s\n", commandString), он также выводит "HELO", но я получите 10 из строки печати strcmp.

1 ответ

  char commandString[COMMAND_LENGTH] = "";
  ...
  commandString[COMMAND_LENGTH] = '\0';

Ты пишешь за конец commandString массив, потому что массивы C используют нулевые индексы. Вы должны выделить дополнительный элемент для нулевого символа завершения.

  char commandString[COMMAND_LENGTH + 1]; 
  // no need to initialize if you are overwriting anyway
Другие вопросы по тегам