我正在嘗試使用GNU Readline Library從stdin讀取一行。我有兩個主要問題(我認爲):一個是PROMPT,另一個是處理Crtl + D(應該退出minishell,而不是seg錯誤) 如何處理Ctrl + D以便它可以退出? 這是我使用輸入行(代碼)功能:如何使用GNU Readline處理Ctrl + D
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'來修改一個環境變量。 –
你爲什麼改變了代碼?沒有必要使評論和答案無效。只要改變你自己的代碼,如果你仍然有麻煩問另一個問題。最好遠離並思考事情,而不是試圖沉迷於實時教程。 –
回捲。你應該不會改變你的問題,如果這使答案無效。請隨時**添加**更多信息,但不要更改現有文本的相關部分並適當標記編輯。 – Olaf