【发布时间】:2017-05-04 22:19:17
【问题描述】:
我正在尝试使用 GNU Readline 库从标准输入读取一行。我有两个主要问题(我认为):一个是提示,另一个是处理 Crtl+D(应该退出 minishell,但是 seg 错误) 如何处理 Ctrl+D 使其退出? 这是我使用 readline() 函数的代码:
char* readl(char* line){
char* string="";
char* pitos="";
pitos=getenv("USER");
strcat(pitos,PROMPT);
strcat(pitos," ");
while(strcmp(string,"")==0){
//printf("%s%s ",getenv("USER"),PROMPT);
string = readline (pitos);
}
if(!string){ #trying to exit when ctrld
exit(0);
}else{
char* com = strchr(string,'#'); #ignore comments
if(com!=NULL){
*com=NULL;
}
add_history(string);
strcpy(line,string);
return string;
}
}
【问题讨论】:
-
您是否可以使用来自
pitos=getenv("USER");的指针更改环境表?即使指针处的内存是可写的,你怎么知道concat的入口是否有空间?您应该使用putenv来修改环境变量。 -
为什么要更改代码?无需使 cmets 和答案无效。只需更改您自己的代码,如果您仍然遇到问题,请提出另一个问题。与其沉迷于实时教程,不如走开思考问题。
-
回滚。如果这会使答案无效,您不应该更改您的问题。随意添加更多信息,但不要更改现有文本的相关部分并适当地标记编辑。