如何在C中读取无限字符

如何在不指定大小的情况下将无限字符读入char*变量?

例如,假设我想要读取可能也需要多行的员工的地址。

你必须首先“猜测”你期望的大小,然后使用malloc分配一个大的缓冲区。 如果结果太小,则使用realloc将缓冲区的大小调整得更大。 示例代码:

 char *buffer; size_t num_read; size_t buffer_size; buffer_size = 100; buffer = malloc(buffer_size); num_read = 0; while (!finished_reading()) { char c = getchar(); if (num_read >= buffer_size) { char *new_buffer; buffer_size *= 2; // try a buffer that's twice as big as before new_buffer = realloc(buffer, buffer_size); if (new_buffer == NULL) { free(buffer); /* Abort - out of memory */ } buffer = new_buffer; } buffer[num_read] = c; num_read++; } 

这只是我的头脑,可能(读:可能会)包含错误,但应该给你一个好主意。

只需回答Ivor Horton第3版的Ex7.1,第130页的Beginning C。 花了几周时间锻炼身体。 允许输入浮动数字而不预先指定用户将输入多少个数字。 将数字存储在动态数组中,然后打印出数字和平均值。 在Ubuntu 11.04中使用Code :: Blocks。 希望能帮助到你。

 /*realloc_for_averaging_value_of_floats_fri14Sept2012_16:30 */ #include  #include  #define TRUE 1 int main(int argc, char ** argv[]) { float input = 0; int count=0, n = 0; float *numbers = NULL; float *more_numbers; float sum = 0.0; while (TRUE) { do { printf("Enter an floating point value (0 to end): "); scanf("%f", &input); count++; more_numbers = (float*) realloc(numbers, count * sizeof(float)); if ( more_numbers != NULL ) { numbers = more_numbers; numbers[count - 1] = input; } else { free(numbers); puts("Error (re)allocating memory"); exit(TRUE); } } while ( input != 0 ); printf("Numbers entered: "); while( n < count ) { printf("%f ", numbers[n]); /* n is always less than count.*/ n++; } /*need n++ otherwise loops forever*/ n = 0; while( n < count ) { sum += numbers[n]; /*Add numbers together*/ n++; } /* Divide sum / count = average.*/ printf("\n Average of floats = %f \n", sum / (count - 1)); } return 0; } /* Success Fri Sept 14 13:29 . That was hard work.*/ /* Always looks simple when working.*/ /* Next step is to use a function to work out the average.*/ /*Anonymous on July 04, 2012*/ /* http://www.careercup.com/question?id=14193663 */ 

如何在堆栈上放置一个1KB的缓冲区(或4KB),直到找到地址的末尾读取,然后分配一个正确大小的缓冲区并将数据复制到它? 从函数返回后,堆栈缓冲区消失,您只能调用malloc