[英]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.