- 论坛徽章:
- 0
|
10可用积分
- #include <stdio.h>
- #include <malloc.h>
- #define MAXLINE 10
- int getline(char *);
- void copy(char *, char *);
- char *line;
- char *longest;
- int main(void)
- {
- int len;
- int max;
- line = (char *)malloc(MAXLINE);
- longest = (char *)malloc(MAXLINE);
-
- if(!line && !longest)
- perror("main malloc ");
-
- max = 0;
-
- while ((len = getline(line)) > 0)
- if (len > max) {
- max = len;
- copy(longest, line);
- }
-
- if (max > 0)
- printf("%s\n", longest);
-
- free(line);
- free(longest);
-
- return 0;
- }
- int getline(char *line)
- {
- int c, i;
-
- for (i=0;(c=getchar())!= EOF && c != '\n'; ++i){
- if(i > MAXLINE - 1)
- line = (char *)realloc(line,MAXLINE + sizeof(char));
- if(!line){
- perror("getline realloc ");
- return 0;
- }
- *(line + i) = c;
- }
-
- if(i > MAXLINE - 1)
- line = (char *)realloc(line,MAXLINE + sizeof(char));
-
- if(!line){
- perror("getline realloc ");
- return 0;
- }
-
- *(line + i) = '\0';
- return i;
- }
- void copy(char *longest, char *line)
- {
- int i;
-
- for(i = 0; *(line + i) != '\0'; i++){
- if(i > MAXLINE - 1)
- longest = (char *)realloc(longest,MAXLINE + sizeof(char));
-
- if(!longest){
- perror("copy realloc ");
- return ;
- }
-
- *(longest + i) = *(line + i);
- }
-
- if(i > MAXLINE - 1)
- longest = (char *)realloc(longest,MAXLINE + sizeof(char));
-
- if(!longest){
- perror("copy realloc ");
- return ;
- }
-
- *(longest + i) = '\0';
- }
复制代码
老问题,新提法...
说说我的问题吧,在输入字符串大于 10 时就会 core dumped 掉。经过我反复查证是由于copy函数中的 for(i = 0; *(line + i) != '\0'; i++) 在*(line + i) =='\0'时没有跳出循环,无限的在循环下去,直到超过系统规定最大值限制时就 core dumped 掉。
很郁闷到底是怎么引起的,难道是realloc引起的? |
最佳答案
查看完整内容
看下面:MAXLINE 是个常量,MAXLINE+sizeof(char) 就是 11[ 本帖最后由 win_hate 于 2007-11-27 18:48 编辑 ]
|