C 从标准输入读取并将每个字存储在数组的单独列中
假设我有一个缓冲区和一些其他指针来存储stdin: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中分开,并在末尾使用空字符 有人能告诉我如何才能按照这个顺序保存命令数组中的命令吗?试试下
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)代码>参见