Использование строк от пользователя в функции exe c - PullRequest
1 голос
/ 06 мая 2020

Я хочу использовать exec() со словом, которое отправляет пользователь, в настоящее время я пытался и получил ошибку «недопустимый аргумент», выполнима ли моя идея, и если да, то как?

Текущий код:

char word[30];
recv(new_sock, &word, sizeof(word), 0);
char command[1024];
sprintf(command,"%s %s","grep -w -i",word);
char *exp[] = {command, NULL};
execvp(exp[0], exp);

1 Ответ

1 голос
/ 06 мая 2020

Похоже, у вас было 2 проблемы. Во-первых, recv не завершает строку нулем. Поэтому, если отправитель не отправил ноль, вам нужно его добавить. Во-вторых, параметры execvp были неверными:

int bytes_rcvd;
char word[30];
if ((bytes_rcvd = recv(new_sock, &word, sizeof(word), 0)) > 0 && bytes_rcvd < sizeof(word)) {
    word[bytes_rcvd] = '\0';
    const char *exp[] = {"grep", "-w", "-i", word, NULL};
    execvp(exp[0], exp);
}
...