[英]Reading from stdin using fgets()
我是C語言編程的新手,目前正在嘗試使用fgets()從stdin讀取一行,但是由於我正在使用char *指向要讀取的字符串,因此在內存分配方面遇到了麻煩。 當我執行文件時,它報告分段錯誤。
這是我正在使用的功能:
char *read_line(char *line){
printf("%s",PROMPT);
line = (char*)malloc(sizeof(char)*500);
fgets(line,sizeof(line),stdin);
printf("%s","pasa el fgets");
return line;
}
而我的主要:
void main(){
char line0;
char *line=&line0;
while(read_line(line)){
execute_line(line);
}
}
主要錯誤是將指針line
傳遞給函數read_line
(按值),並嘗試在該函數中對其進行修改。
read_line
分配內存並實際創建指針值。 因此它應該能夠更改main
中line
的值:
char *read_line(char **line){
...
*line = malloc(500);
fgets(*line, 500, stdin);
...
return *line;
}
int main(void) {
char *line;
while(read_line(&line)){
...
}
}
或者,您可以使用read_line
的返回值來修改main
的line
。 在這種情況下,您根本不需要參數:
char *read_line(void) {
char *line;
...
line = malloc(500);
fgets(line, 500, stdin);
...
return line;
}
int main(void) {
char *line;
while(line = read_line()){
...
}
}
其他錯誤(喬納森·萊因哈特指出)和備注:
sizeof
對指針不起作用(數組衰減到指針)。 malloc
許多字符串line
但沒有free
它們。 sizeof(char)
始終為1。 malloc
的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.