前言
使用C語言編程時經常需要從各種途徑讀取數據並將其保存在內存中,但C語言為了保持簡潔,所以只包含一些很基礎的數據類型,有時候並不能很好的存儲用户輸入的數據。
例如:需要存儲用户輸入的字符串,通常,教科書上所教的方法是分配一個較大的數組來進行存儲。顯然,這在實際生產環境中是相當不切實際的。
為了相對完美的解決這個問題,我們可以通過動態的開闢堆空間來實現對數據的存儲。
例程簡介
此例程每次接收一個字符,並利用realloc函數根據數據量大小來重新分配堆空間。
例程代碼
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> int main(void) { char tmp = '\0'; char *str = NULL; for (int i = 0; true; i++) { tmp = getchar(); if ((tmp == '\r') || (tmp == '\n')) break; /*每次循環都按照當前數據量大小來重新分配堆空間大小*/ str = (char *) realloc(str, sizeof(str) + sizeof(tmp)); if (str == NULL) return -1; str[i] = tmp; } printf("%s\n", str); return 0; }
執行結果
輸入:hello,it7e!!!,程序動態開闢內存存儲字符串並輸出hello,it7e!!!,如下圖。