簡體   English   中英

使用getline()C時出現分段錯誤

[英]Segmentation Fault when using getline() C

我看過的每個其他線程都有一個問題,就是沒有將line初始化為NULL,len初始化為0。這是我的代碼的一部分:

    char* line = NULL;
    char* line2 = NULL;
    size_t len = 0;
    size_t len2 = 0;
    char *function = NULL;
    size_t read, read2;       //read2 gia to config
    while ((read = getline(&line, &len, op)) != -1)
    {
            line[read - 2] = 0;
            char* pch;
            pch = strtok(line, " ");
            strcpy(function, pch);

提前致謝。

您的代碼有多個問題,

  1. 如果read < 2則您的索引小於0
  2. 如果pchNULL ,則取消引用NULL指針

    關於strtok()注釋,

    • 如果找不到分隔符,則返回NULL
    • 處理多個字符串或在多線程程序中使用它真的很糟糕,因為它不會重入。
    • 總有更好的選擇涉及strchr()strstr()strpbrk() ,所有這些都沒有strtok()的限制。

    請注意,我並不是說您不應該使用strtok() ,在某些合理的情況下,它是BEST選項,我只是警告您一些限制,並闡明其預期的行為,以便您正確地使用它,並假設它是僅僅因為您“ 知道 ”輸入而返回了某些內容,簡直是一種糟糕的編程習慣。 總是檢查錯誤,最好是為什么程序失敗而不是完全困惑。

    實際上,說或認為“ 您知道輸入 ”是錯誤的,因為

    1. 編寫用於處理單個輸入的代碼有什么意義?

    2. 這不是您的想法,有些字符可能對您很清楚,但是編輯器可以像使用' '空格一樣呈現'\\t'制表符。

您不應將其歸咎於getline()因為眾所周知它可以正常工作,所以這幾乎不是問題。

您的程序會調用未定義的行為 ,因此無法確定問題的確切發生原因,因為它可能發生在某處,並且程序會繼續執行,直到有人執行某些操作來觸發分段錯誤為止。

暫無
暫無

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

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