gpt4 book ai didi

c - execvp(array[i], array) 其中 array[NUMBER][NUMBER] 错误

转载 作者:行者123 更新时间:2023-11-30 15:22:12 26 4
gpt4 key购买 nike

我正在尝试将用户输入的预定义大小的数组发送到 execvp 函数,但是我收到了来自编译器的警告。stackoverflow 需要一定比例的文本代码,所以我只是想填写它以便我可以提交我的帖子。不要费心阅读本文,只需查看下面的代码即可。预先感谢您!!!

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define INPUTSIZE 50
#define INPUTCOUNT 10

int parseInput(char string[*][INPUTSIZE]);

void main(int argc, char **argv){
char prompt = '#', shellInput[INPUTCOUNT][INPUTSIZE];
pthread_t thread;
pid_t processID;
int rc;

while(1){
printf("%c", prompt);

if(parseInput(shellInput)==EOF){
exit(EXIT_SUCCESS);
}

processID = fork();
if(processID == 0){
execvp(shellInput[0], shellInput);
printf("Uknown command\n");
}


printf("Nope.gif!\n");
fflush(stdout);

}
}

int parseInput(char string[INPUTCOUNT][INPUTSIZE]){
char *inputString, *tempString;
int i, status;
size_t bytecount = INPUTSIZE+1;

inputString = (char *)malloc(INPUTCOUNT*INPUTSIZE);
tempString = (char *)malloc(INPUTSIZE);
status = getline(&inputString, &bytecount, stdin);

tempString = strtok(inputString, " ");


for(i = 0; i < INPUTCOUNT && tempString != NULL; i++){
strncpy(string[i], tempString, INPUTSIZE);
tempString = strtok(NULL, " \n\r");
}
strncpy(string[i], "NULL", sizeof(NULL));

return status;
}

最佳答案

给定

char shellInput[INPUTCOUNT][INPUTSIZE];

变量shellInput的类型是“INPUTCOUNT数组的INPUTSIZE char数组”。在大多数情况下,shellInput 会自动转换为类型“指向 INPUTSIZE char 数组的指针”(char (*)[INPUTSIZE ])。这与“指向 char 的指针数组”((char *)[]) 完全不同,后者是 的第二个参数所需的类型>execvp().

(从技术上讲,execvp() 实际上被声明为接受一个 const 数组(非 const 指针),但它是可以接受的传递一个非常量。)

看起来你想要更多类似这样的东西:

    char *shellInput[INPUTCOUNT + 1];

/* ... */

int parseInput(char *string[]) {
char *line = NULL;
size_t line_len;
ssize_t n_read = getline(&line, &line_len, stdin);
char *token;
int input_count = 0;

if (n_read < 0) {
return n_read;
}

for (token = strtok(line, " "); token && (input_count < INPUTCOUNT);
token = strtok(NULL, " ")) {
string[input_count++] = strdup(token);
}
string[input_count] = NULL;
free(line);

return n_read;
}

还要注意,父进程需要在每次 fork( )。此外,请注意,没有什么特殊原因可以使 shellInput 具有类型 char **,并教 parseInput() 安排为任意数量的命令行单词动态分配足够的空间。

关于c - execvp(array[i], array) 其中 array[NUMBER][NUMBER] 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29284178/

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