69,382
社区成员
发帖
与我相关
我的任务
分享
/**
* 获取用户输入的字符串,打印行号
* skchen @ 2009.08.29 03:03
*/
#include <stdio.h>
#include <stdlib.h>
#define MEM_SIZE 100
void main() {
//行号
int line_num = 1;
//行字符数
int char_num = 1;
//行指针
char *line = NULL;
//用户输入的字符
char c;
//已分配内存大小
int total_mem_size = 0;
while ((c = getchar()) != EOF && c != '\n') {
do {
//看看内存空间是否足够用,要留一位给\0
if (total_mem_size < char_num) {
//分配扩大内存空间
line = realloc(line, total_mem_size + MEM_SIZE);
if (line == NULL) {
printf("动态内存分配错误!程序退出!\n");
exit(EXIT_FAILURE);
}
//如果分配成功,内存总分配大小加上去
total_mem_size += MEM_SIZE;
}
//把字符给数组
line[char_num - 1] = c;
char_num++;
//继续获取字符
c = getchar();
//判断是否回车,如果不是则未结束,继续循环
} while (c != '\n');
//添加字符串结束符
line[char_num - 1] = '\0';
//打印结果
printf("line: %d, length: %d, size: %d, string: %s\n", line_num, char_num, total_mem_size, line);
//释放内存
free(line);
//指针重新置为NULL
line = NULL;
//内存大小置为0
total_mem_size = 0;
//字符长度初始化为1
char_num = 1;
//行号+1
line_num++;
}
exit(EXIT_SUCCESS);
}