Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从标准输入读取并将每个字存储在数组的单独列中_C_Execvp - Fatal编程技术网

C 从标准输入读取并将每个字存储在数组的单独列中

C 从标准输入读取并将每个字存储在数组的单独列中,c,execvp,C,Execvp,假设我有一个缓冲区和一些其他指针来存储stdin: char buffer[256]; char *command[3]; 我正在从标准输入到缓冲区: fgets(buffer, BUF_SIZE, stdin); 如果stdin是ls-s1,我希望有命令[0]=“ls”和命令[1]=“s1”。我还希望命令[2]=NULL 对于上下文,我稍后将尝试使用execvp(),因此我希望所有命令在command中分开,并在末尾使用空字符 有人能告诉我如何才能按照这个顺序保存命令数组中的命令吗?试试下

假设我有一个缓冲区和一些其他指针来存储stdin:

char buffer[256];
char *command[3];
我正在从标准输入到缓冲区:

fgets(buffer, BUF_SIZE, stdin);
如果stdin是
ls-s1
,我希望有
命令[0]=“ls”
命令[1]=“s1”
。我还希望
命令[2]=NULL

对于上下文,我稍后将尝试使用
execvp()
,因此我希望所有命令在
command
中分开,并在末尾使用空字符


有人能告诉我如何才能按照这个顺序保存命令数组中的命令吗?

试试下面的代码:

    #include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <unistd.h>
int main() {
    
    char buffer[256];
    char *command[3];
    int i=0;

    fgets(buffer,256,stdin);
    char *p = strchr(buffer, '\n');
    if (p)  *p = 0;
    char *token=strtok(buffer," ");
    command[0]=strdup(token);
    printf("%s\n",command[0] );
    while(token!=NULL){
        
        token=strtok(NULL," ");
        if(token!=NULL){

            command[++i]=strdup(token);
            printf("%s\n", command[i]);
        }
    }
    command[2]=NULL;
    execvp(command[0],command);
    return 0;
}
#包括
#包括
#包括
#包括
#包括
int main(){
字符缓冲区[256];
char*命令[3];
int i=0;
fgets(缓冲区,256,标准输入);
char*p=strchr(缓冲区“\n”);
如果(p)*p=0;
char*token=strtok(缓冲区“”);
命令[0]=strdup(令牌);
printf(“%s\n”,命令[0]);
while(令牌!=NULL){
令牌=strtok(空,“”);
if(令牌!=NULL){
命令[++i]=strdup(令牌);
printf(“%s\n”,命令[i]);
}
}
命令[2]=NULL;
execvp(命令[0],命令);
返回0;
}

使用strtok函数标记输入yes,并将输入分隔开。但是,当我尝试使用
execvp()
时,我得到了以下警告:
警告:传递'execvp'的参数1会从整数生成指针,而不使用强制转换[-Wint conversion]execvp(commands[0],commands)参见