#include #include #include /* * End on a "***" */ char * * readStrings( int *itemsRead ) { static char buffer[ 1024 ]; int i = 0; char * *arr; int N = 5; static int totalCalls = 0; printf( "Call #%d\n", totalCalls++ ); arr = (char * *) malloc( N * sizeof( char * ) ); for( ; ; ) { printf( "Enter arr[%d]: ", i ); if( i == N ) arr = (char * *) realloc( arr, ( N *= 2 ) * sizeof( char * ) ); if( scanf( "%1023s", buffer ) != 1 ) break; if( strcmp( buffer, "***" ) == 0 ) break; arr[ i ] = strdup( buffer ); i++; } *itemsRead = i; return arr; } /* Return a string with N a's */ char *makeLongString( int N ) { char * buffer = (char *) malloc( ( N + 1 ) * sizeof( char ) ); int i; strcpy( buffer, "" ); for( i = 0; i < N; i++ ) strcat( buffer + i, "a" ); return buffer; } int main( ) { /* char * *arr; int N; int i; int j; for( j = 0; j < 3; j++ ) { printf( "Enter an unlimited number of strings terminated by ***\n" ); arr = readStrings( &N ); for( i = 0; i < N; i++ ) printf( "arr[%d]=%s\n", i, arr[ i ] ); } */ char *str = makeLongString( 200000 ); printf( "%d\n", strlen( str ) ); free( str ); return 0; }