在exec函数中使用来自用户的字符串

在exec函数中使用来自用户的字符串,c,exec,C,Exec,我想对用户发送的单词使用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); 看起来你有两个问题。

我想对用户发送的单词使用
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);

看起来你有两个问题。首先,
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);
}
int字节\u rcvd;
字符字[30];
如果((bytes_rcvd=recv(new_sock,&word,sizeof(word),0))>0&&bytes_rcvd
请注意,
recv
不会以null结尾字符串。因此,除非发件人发送空值,否则您需要添加它。谢谢您的评论。我通过以下操作修复了这个问题:
intn=recv(…);字[n]=“0”
但这并没有修复错误,我并没有真正使用
execvp
但我认为它应该是
char*exp[]={“grep”、“-w”、“-I”、word、NULL};execvp(exp[0],exp)谢谢,这很有效