1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | /* 從檔案中讀入未知筆數的字串, 一行一串字串, 動態增加 pointer to char* 指到的空 * 間大小, 以增加字元指標數, 然後再讀入不同長度的字串, 再配置夠大的空間儲存字元 */ #include <stdio.h> #include <stdlib.h> //////////////////////////////////////////////////////////////////////////////// enum { MAX_STRING_LENGTH = 100 }; //////////////////////////////////////////////////////////////////////////////// void printStrings( char **array, int arraySize ); void freeStorage( char **array, int arraySize ); //////////////////////////////////////////////////////////////////////////////// int main() { char **array = NULL; // 二次指標 int dataCount = 0; // 資料筆數 FILE *file = fopen( "test.txt", "r" ); char buffer[MAX_STRING_LENGTH + 1]; while( fgets( buffer, MAX_STRING_LENGTH, file ) != NULL ) { ++dataCount; // 配置新指標 array = realloc( array, sizeof(char*) * dataCount ); int length = strlen(buffer); if( buffer[ length - 1 ] == '\n' ) buffer[ length - 1 ] = '\0'; // 配置儲存字串的記憶體 array[dataCount - 1] = malloc( sizeof(char)*strlen(buffer) + sizeof(char) ); // 複製字串 strcpy( array[dataCount - 1], buffer ); } printStrings( array, dataCount ); freeStorage( array, dataCount ); array = NULL; system("pause"); } //////////////////////////////////////////////////////////////////////////////// void printStrings( char **array, int arraySize ) { int index; for ( index = 0; index != arraySize; ++index ) puts( array[ index ] ); } void freeStorage( char **array, int arraySize ) { int index; for ( index = 0; index != arraySize; ++index ) free( array[ index ] ); free( array ); } |
Direct link: https://paste.plurk.com/show/283157