我创建了一个小型FTP服务器,并提供了一些可用的命令。
以下是我如何检查用户的输入,看它是否与我的链接列表中的某个命令匹配:
int check_cmd(char *buff, char *cmd)
{
int end;
if (strstr(buff, cmd) != buff)
return (-1);
end = strlen(cmd);
if (buff[end] != '\0' && buff[end] != ' ' && buff[end] != '\n')
return (-1);
return (0);
}
void read_command(t_client *client, t_cmd *lexer)
{
t_cmd *current;
bzero(client->buff, MAX_READ + 1);
server_read(client);
current = lexer;
while (current != NULL) // Go through the linked list, checking if it matches
{
if (check_cmd(client->buff, current->cmd) == 0) // It matches a command !
{
current->ptr(client); // Calls the appropriate function
return ;
}
current = current->next;
}
server_write(client, "Invalid command.\n");
}
但是使用-C
的{{1}}选项会默认在每个命令发送netcat
,但是,我不会检查它。
如何检查\r\n
是否通过命令行传递?
答案 0 :(得分:0)
我看到的第一件事就是结尾应该是:
end = strlen(cmd) - 1;
因为C中的数组是以0而不是1开头的索引访问的。
要检查字符串末尾的a,请确定end-1是否为' \ r'结束是' \ n':
if(buff[end-1] == '\r' && buff[end] == '\n')
{
// do something
}