gpt4 book ai didi

c - 尝试使用 strtok() 作为 C 中的 shell 函数

转载 作者:行者123 更新时间:2023-11-30 19:51:38 25 4
gpt4 key购买 nike

我正在尝试标记用户为 shell 程序输入的命令。该程序运行,但我认为它没有填充我声明的参数数组。如果我似乎没有大量信息,我很抱歉,因为我正在学习此操作,但我不确定为什么它没有填充参数。如有任何帮助,我们将不胜感激,如果您需要任何其他信息,请随时询问。

#include "HeaderFile.h"
#include <stdio.h>
#include <stdlib.h>
#define token_delimiter " \n\r"

char **shell_read(char *line, char **param){

line = NULL;
ssize_t size = 0;
getline(&line, &size, stdin);
//printf("%s", line);
int i = 0;
char *line_token;
line_token = strtok(line, token_delimiter);
printf("%s", line_token);
for(i=1; line_token!=NULL; i++){
param[i] = line_token;
line_token = strtok(NULL, token_delimiter);

}
param[0] = NULL;
return(param);
}

最佳答案

像这样:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define token_delimiter " \n\r"

char **shell_read(void){//Parameters are not necessary. because they are made in this function.
char *line = NULL;
size_t size = 0;
ssize_t len;
if(-1 == (len = getline(&line, &size, stdin))){
free(line);
return NULL;
}

char **param = malloc(sizeof(*param) * ((len + 1)/2 + 1));//last +1 for NULL
int i = 0;
char *line_token = strtok(line, token_delimiter);

while(line_token != NULL){
param[i++] = strdup(line_token);//need allocate and copy
line_token = strtok(NULL, token_delimiter);
}
param[i] = NULL;
free(line);

return param;
}

int main(void){
putchar('>');fflush(stdout);

char **tokens = shell_read();
if(tokens){
for(char **token = tokens; *token; ++token){
puts(*token);
free(*token);
}
free(tokens);
}
return 0;
}

关于c - 尝试使用 strtok() 作为 C 中的 shell 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39604667/

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