Привет, код программы это обработка входного потока и запись сим волов в массив,
в функции del_spacetab я считаю сколько пробелов до конца строки.
вопрос в том что строки после добавления в массив не выводятся каждая на свою строку. хотя я не удаляю символы перехода на новую строку . и второй вопрос почему в функции coppy - программа крашится на освобождении памяти free(p1) ? не могу понять в чем ошибка. при компилировании нет ошибок. и предупреждений
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int getlen(char **p1,char **p2);
void pprint(char **p1, int len);
int del_spacetab(char **p1,int len);
void coppy(char **p2,char **p1, int len_p2,int len,int *first_round);
int main(){
char *p1, *p2;
int len;
int len2;
int len_p2;
int len_max = 8;
int first_round =0;
p1 = (char*)malloc(1000 * sizeof(char));
p2 = (char*)malloc(1000 * sizeof(char));
len_p2=0;
while ((len = getlen(&p1,&p2)) >0){
if (len >= len_max){
len2 = del_spacetab(&p1,len);
len-=len2;
len_p2 += len;
coppy(&p2, &p1,len_p2,len,&first_round);
}
}
printf("Total:\n");
int i;
for (i=0;i<len_p2;++i){
printf("%c",p2[i]);
}
free(p2);
return 0;
}
int getlen(char **p1,char **p2){
int c, i;
for (i=0; (c=getchar()) != EOF && c != '\n'; ++i){
if (i==1000){
(*p1) = (char*)realloc(*p1, 100000 * sizeof(char));
(*p2) = (char*)realloc(*p2, 100000 * sizeof(char));
}
(*p1)[i]=c;
}
if (c == '\n'){
(*p1)[i]=c;
++i;
}
(*p1)[i]='\0';
return i;
}
void pprint(char **p1, int len){
int i;
for (i=0; i<len; ++i){
printf("%c",(*p1)[i]);
}
}
int del_spacetab(char **p1,int len){
int i;
int n=0;
for (i=0;i<len;i++){
if ((*p1)[i] == ' ' || (*p1)[i] == '\t' && (*p1)[i] != '\n'){
n++;
}
else if ((*p1)[i] != '\n'){
n=0;
}
if ((*p1)[i] == '\n'){
//n++;
return n;
}
}
}
void coppy(char **p2,char **p1,int len_p2,int len,int *first_round){
int i,n;
n=0;
if (*first_round == 0) {
*first_round=1;
i =0;
len=0;
}
else {
i=len_p2-len;
}
for (; i< len_p2; ++i){
(*p2)[i] = (*p1)[n];
n++;
}
free(*p1);
}