這個問題在這里已經有了答案: 將資料復制/掃描/讀取到未初始化的指標時崩潰或“分段錯誤” (5 個回答) 9 小時前關閉。
為什么fgets當我將char指標作為第一個引數傳遞時會出現段錯誤?例如:
char *p;
fgets(p, 10, stdin); // segmentation fault
當我們將其宣告為(如上例所示)時,char指標是怎么回事?謝謝!pchar *p
uj5u.com熱心網友回復:
p包含垃圾值。您需要先對其進行初始化。
char *p = (char*)malloc(10);
if (p == NULL) {
// handle error
}
//use p
// Once you're done with p
free(p);
或者
char p[10]; // Automatic storage
uj5u.com熱心網友回復:
指標p必須指向緩沖區。
char buf[10];
char *p = buf;
fgets(p, 10, stdin);
現在應該作業。請注意,陣列運算式會衰減為指標,因此可以將代碼簡化為:
char p[10];
fgets(p, 10, stdin);
uj5u.com熱心網友回復:
fgets可以并且確實將指向字符緩沖區的有效指標作為第一個引數。在您的情況下,您char *p的無效。它尚未初始化,可能指向垃圾值。
您可以將其初始化為靜態字串或包含一些合理值的字符陣列。
uj5u.com熱心網友回復:
這里 p 只是一個指標,它沒有指向任何東西,因為它還沒有被初始化。您可以通過為其分配記憶體來對其進行初始化。
char *p = (char*)malloc(10);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/322580.html
標籤:C
上一篇:為什么C中的矩陣會發生這種情況?
下一篇:C一本書的結構
