Привет, переделываю пример из книги по СИ . в задании сказано определить самую длинную строку введенную с клавиатуры и вывести на экран. Проблема в том что видимо где то не верно работаю с указателем мне так кажется . почему то больше чем 24 символа не принимает, первый раз вроде делает увеличение памяти если изначально выделенная закончилась . но когда вводишь вторую строку то перераспределение не работает и программа завершается . не могу понять в чем я ошибся
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int getline(char *p1,char *p2);
void copy (char *p2,char *p1);
int main(){
char *p1,*p2;
int len;
int max;
int n =100;
p1 = (char*)malloc(n * sizeof(char));
p2 = (char*)malloc(n * sizeof(char));
while((len=getline(p1,p2)) > 0){
if (len>max){
max=len;
copy(p2,p1);
}
}
if (max>0){
int i;
printf("%s",p2);
}
free(p1);
free(p2);
return 0;
}
int getline(char *p1,char *p2){
int c, i;
for (i=0; (c=getchar()) != EOF && c != '\n'; ++i){
if (i==10){
printf("%s\n","UP1");
p1 = (char*)realloc(p1, 2 * sizeof(char));
p2 = (char*)realloc(p2, 2 * sizeof(char));
printf("%s\n","UP2");
}
printf("c[%d] = %c\n",i,c);
*(p1+i)=c;
}
if (c == '\n'){
*(p1+i) = c;
++i;
}
*(p1+i)='\0';
return i;
}
void copy(char *p2, char *p1){
int i;
i=0;
while ((*(p2+i) = *(p1+i)) != '\0'){
++i;
}
free(p1);
}