Сравните 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