Заполните C-Array нулями, затем скопируйте в него данные

Это часть клиентского приложения FTP, которое использует сокеты для сетевого взаимодействия. Перед отправкой команды на FTP-сервер я хочу инициализировать буфер команд на нули - нет шансов смешать новую команду с любыми старыми символами, которые могут находиться в конце буфера (после новой команды и '\0',

//global buffers msg[1024] and cmd[16]
void sendCommand(int client_socket, char* command, size_t cmd_len) {
    int in, out;
    memset(&msg, 0, sizeof(msg));
    memset(&cmd, 0, sizeof(cmd));
    strncpy(cmd, command, cmd_len); //
    printf("Command: %s\n", cmd);   //debugging prompt
    out = send(client_socket, cmd, sizeof(cmd), 0);
    sleep(1);
    in = recv(client_socket, msg, sizeof(msg), 0);
    sleep(1);
    printf("received %d bytes: %s\n", in, msg);  //debugging prompt
}

Изменить: Ниже приведен вызов функции выше:

sendCommand(client_socket, "USER anonymous\r\n", sizeof("USER anonymous\r\n"));

Проблема в том, что буфер действительно пуст и затем заполняется командой, но сервер не может распознать определенные команды (например, PASV). Проблема в коде, потому что, если я пытаюсь закомментировать memset(&cmd, 0, sizeof(cmd)); Я получаю ожидаемый результат для текущей команды плюс ошибка 500 Неизвестная команда для хвостов буфера cmd

Вот пример ответа с сервера:

Command: USER anonymous
received 720 bytes: 331 Please specify the password.
Command: PASS dummy    
received 720 bytes: 230-FFFFF III TTTTTT  Welcome!
230 Login successful.
500 Unknown command.    //tail of old data
command: PASV    
received 94 bytes: 227 Entering Passive Mode (147,229,9,30,40,184).
500 Unknown command.    //tail of old data
500 Unknown command.    //tail of old data
command: QUIT    
received 14 bytes: 221 Goodbye.

Заранее спасибо!

2 ответа

Ошибка была неверной длины строки. 1) нет NULL в конце строки необходимо. 2) Единственный правильный конец строки - CRLF для FTP. 3) Теперь я использую strlen вместо sizeof

Вы ставите /r в конце своей команды? и убедитесь, что в strncpy cmd_len будет включать /r в длину

Другие вопросы по тегам