BILIOUS
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Салют! Люди, расскажите о динамической памяти(попонятнее). Я тут прогараммку написал(поиск слова и замена), но она глючит, когда на новой строке вводишь \0. Расскажите, кто знает, что делает fflush(stdin) и зачем она нужна????? Ну, и принцип работы free(). В чем отличие \0 от \r Посмотрите функцию обработки. Подскажите, что исправить и что добавить(please): islo - заменяемое слово, vslo - вставляемое слово, txt - исходный массив, newtxt - новый массив //========================= OBRABOTKA TEXTA =================== char **kase6(int kol,char **txt,char *islo,char *vslo,int n) { int i,j,k,m,l,znak,npstr; char **newtxt,*str,*newstr,*nach_islo; newtxt=(char**)malloc(sizeof(char*)); // videlenie pamyati dlya nov. massiva nach_islo=islo; for(i=0;i<n;i++) { j=strlen(txt[i])+1; // dlina tekuschei stroki str=(char*)malloc(j*sizeof(char)); // vid. pamyati pod tek. stroku strcpy(str,*(txt+i)); newstr=(char*)malloc(j*sizeof(char));// vid pamyati pod nov. stroku m=0,l=0; do { if(*(str+m)==*islo&&kol) // esli simvoli ravni i kol-vo zamen ne ischerpano { npstr=m; znak=1; for(k=0;k<strlen(nach_islo)&&znak;k++)// proverka slova if(*(str+m+k)!=*islo++) znak=0; m+=k; islo=nach_islo; if(znak) { j=j-strlen(islo)+strlen(vsl); // pereschet dlini texta newstr=(char*)realloc(newstr,j*sizeof(char)); for(k=0;k<strlen(vslo);k++) *(newstr+l+k)=*(vslo+k); // zapis' slova-zamenitelya v newtxt kol--; l+=k; } else { m=npstr; *(newstr+l)=*(str+m); l++,m++; } } else { *(newstr+l)=*(str+m); l++,m++; } } while(*(str+m)!=ks); newtxt=(char**)realloc(newtxt,(i+1)*sizeof(char*)); *(newtxt+i)=(char*)malloc((j-1)*sizeof(char)); // kopiruem nov. stroku v strcpy(*(newtxt+i),newstr); // novii massiv } return newtxt; } СПАСИБО!!! |