gpt4 book ai didi

c - 无法将用户输入数组传递给 execvp

转载 作者:行者123 更新时间:2023-11-30 15:05:44 27 4
gpt4 key购买 nike

这是我的输入函数:

    int i,j,n,len,c;
char *buffer = 0;
size_t bufsize = 0;
ssize_t characters;

characters = getline(&buffer, &bufsize, stdin);

len = strlen(buffer);
buffer[len-1]='\0';

if (characters > 0)
{
char *end_str1;
char *token1 = strtok_r(buffer, ";", &end_str1);
int count = 0, wordcnt;
while (token1 != NULL)
{
char cmd[10][101];
memset(cmd,0,sizeof(cmd));
wordcnt = 0;
char *end_str2;
count++;
char *token2 = strtok_r(token1, " ", &end_str2);
while (token2 != NULL)
{
n = strlen(token2);
strncpy(cmd[wordcnt],token2,n);
wordcnt++;
token2 = strtok_r(NULL, " ", &end_str2);
}
cmd[wordcnt+1][0]='\0';
execvp(cmd[0],cmd);
token1 = strtok_r(NULL, ";", &end_str1);
}
}
free(buffer);

唯一的警告是指针类型不兼容,但我的 cmd 数组是 **ptr,所以我不明白出了什么问题。

我尝试将其等同于 **k,然后将其传递给 execvp。没用。我尝试将 cmd 更改为 **cmd,我认为我在那里做错了什么,因为它应该有效,但没有。

最佳答案

my cmd array is a [char] **ptr

不,不是。

它是一个 char[10][100],当传递给 execvp() 时,它会衰减为指向其第一个元素的指针,即 char (*)[101].

这里还有一个“相差一”错误:

cmd[wordcnt+1][0]='\0';

wordcnt 已在标记化循环内递增。

你想要的是:

#define MAX_NO_OF_CMD_ELEMENTS (10)

...

char * cmd[MAX_NO_OF_CMD_ELEMENTS + 1]; /* 1+ for the NULL-terminator */
size_t wordcnt = 0;
char *end_str2;
count++;
token2 = strtok_r(token1, " ", &end_str2);
while ((NULL != token2)
&& (MAX_NO_OF_CMD_ELEMENTS > wordcnt)) /* Prevent writing
out of `cmd`'s bounds. */
{
cmd[wordcnt] = token2;
wordcnt++;
token2 = strtok_r(NULL, " ", &end_str2)
}
cmd[wordcnt] = NULL;

execvp(cmd[0], cmd);
<小时/>

另外^2 getline() 已经返回一个以 0 结尾的 char 数组(一个“字符串”)。不需要这个

    len = strlen(buffer);
buffer[len-1]='\0';

关于c - 无法将用户输入数组传递给 execvp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39674629/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com