我正在尝试使用GNU Readline Library从stdin读取一行。我有两个主要问题(我认为):一个是PROMPT,另一个是处理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;
}
}
答案 0 :(得分:1)
char* pitos="";
pitos=getenv("USER");
strcat(pitos,PROMPT);
strcat(pitos," ");
pitos
指向的字符串中只有1个字节可用(终止'\0'
),并且写入它是未定义的行为。
答案 1 :(得分:0)
一个问题似乎是在strcmp()
的结果上调用readline()
,然后再将其测试为NULL。
试试这个:
while(string && strcmp(string,"")==0){
...