簡體   English   中英

C中的strcpy段錯誤

[英]strcpy seg fault in C

很好奇這個 strcpy 出了什么問題。

int main(void){
    char *history[10];
    for(int i = 0; i < 10; i++){
        history[i] = NULL;
    }
    char line[80];
    fgets(line,80,stdin); 
    strcpy(history[0],line); //This line segfaults
}

您已經創建了一個空指針數組。 然后您嘗試將字符復制到 NULL。 這是一個禁忌。

編輯:您的程序可以優化為:

void main() {
   char line[80];
   fgets(line,80,stdin); 
}

您的歷史數組永遠不會用於生成任何輸出。 因此,雖然其他人指出您需要分配內存,但從技術上講,您可以簡單地這樣做:

history[0] = line;

這將是一個有效的指針,直到該行超出范圍,這是歷史超出范圍的時候,因此無關緊要。

您需要為history[0]分配內存。 由於history[0]被分配了 NULL 引用它或寫入它會/可能會導致段錯誤。

就像是

//this will create memory for 100 chars
history[0] = malloc(sizeof(char) * 100); 
strcpy(history[0],line);

或者

//shortcut for both - this allocate new memory and returns pointer.
history[0] = strdup(line);

暫無
暫無

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

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