所以我正在學習指標和動態記憶體以及如何嘗試 fgets。
所以我想使用 fgets 將字串輸入輸入到指標中,但我希望 fgets 的大小通過我用于指標的 malloc 函式動態改變有沒有辦法做到這一點?例如
int main(){
char *text;
text =(char *)malloc(200 * sizeof(char));
fgets(text, n, stdin);
return 0;
}
解釋
- 我創建了一個名為“text”的字符指標來最終存盤字串。
- 然后我使用 malloc 計劃存盤 200 個字符
- 接下來我想使用 fgets 來接收用戶輸入的字串 'n' 是 malloc 為指標分配的文本大小?
我試過fgets(text, sizeof(text), stdin);了,但它不起作用?
uj5u.com熱心網友回復:
這將不起作用,因為sizeof(ptr)ptr 是指向 char 陣列的動態指標將始終是指標的大小(64 位機器為 8),而不是陣列的大小。你必須:
- 要么將 200 存盤在某種變數中;或者
- 為文本靜態分配記憶體,例如
char text[200];
uj5u.com熱心網友回復:
一種常見的方法是分配一些上限大小的緩沖區,然后調整它的大小。
char *fgets_alloc(FILE *f, size_t max_size) {
char *buf = malloc(max_size);
if (buf) {
if (fgets(buf, max_size, f)) {
size_t sz = strlen(buf) 1;
void *ptr = realloc(buf, sz); // Reduce allocation
if (ptr) {
buf = ptr;
}
return buf;
}
free(buf);
}
return NULL;
}
待辦事項:處理過長行和max_size超出int范圍的代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/473138.html
上一篇:如何將int轉換為void*?
