簡體   English   中英

使用fgets()從stdin讀取

[英]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分配內存並實際創建指針值。 因此它應該能夠更改mainline的值:

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的返回值來修改mainline 在這種情況下,您根本不需要參數:

char *read_line(void) {
    char *line;
    ...
    line = malloc(500);
    fgets(line, 500, stdin);
    ... 
    return line;
}

int main(void) {
    char *line;
    while(line = read_line()){
        ...
    }
}

其他錯誤(喬納森·萊因哈特指出)和備注:

  1. sizeof對指針不起作用(數組衰減到指針)。
  2. malloc許多字符串line但沒有free它們。
  3. sizeof(char)始終為1。
  4. 有些人(我也是)認為應該避免強制轉換malloc的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM