|
10鱼币
本帖最后由 wow7jiao 于 2018-7-21 16:32 编辑
http://bbs.fishc.org/thread-80955-1-5.html
-------------------------------------------
01.#include <stdio.h>
02.#include <stdlib.h>
03.
04.#define INCREMENT 10
05.#define INIT_SIZE INCREMENT
06.
07.int main(void)
08.{
09. char ch;
10. char *num; // 存储整个数据的首地址
11. char *last; // 最近一次迭代的起始地址
12. int limit = 0; // 每次迭代的限制值
13. long times = 1; // 记录重新申请多少次内存
14.
15. num = (char *)malloc(INIT_SIZE);
16. if (num == NULL)
17. {
18. exit(1);
19. }
20.
21. last = num;
22.
23. printf("请输入一个整数:");
24.
25. while ((ch=getchar()) != '\n')
26. {
27. last[limit++] = ch;
28. if (limit >= INCREMENT)
29. {
30. int offset = last - num;//<---------------------------------源地址减目标地址才有偏移,请问last是什么时候自增加的,上面只有last[limit++](这个不会使last地址自增的,所以offset永远结果是0)
31. num = (char *)realloc(num, INIT_SIZE + INCREMENT * times++);
32. last = num;
33. last += offset;
34. last += INCREMENT;
35. limit = 0;
36. }
37. }
38. last[limit] = '\0';
39.
40. printf("你输入的整数是:%s\n", num);
41.
42. return 0;
43.}
|
|