April 1, 2003
tjenna!
håller fortfarande på med mitt lilla projekt i programutveckling...vi skall göra en bantad variant av linux editorn ED....
denna gång e det min insert funktion som inte fungerar...
den funktionen skall lägga till text i raden ovanför man befinner sig på...men det fungerar inte...
när jag lägger till något så hamnar massa konstiga tecken i texten istället..
kod:
int insert(char text[], const char buffer[], int cursor,
int* nr_of_lines, int* success ){
int line_start, line_end, i, j, k;
char tmp[MAX_ROW*MAX_LINES];
get_line_n( text, cursor, &line_start, &line_end );
if( !is_full(text) ){
/* printf("%d %dn",line_start, line_end);*/
strncpy(tmp,text,line_start);
strcat(tmp, buffer);
strcat(tmp, text+line_start+strlen(buffer));
strcpy(text,tmp);
*success = TRUE;
}else{
*success = FALSE;
}
cursor++;
return cursor;
}
line start och lind end pekar på start och slut på raden...
January 15, 2004
Var kommer de konstiga tecknen? I raden du infogar eller nedanför?
Skulle du kunna bifoga ett exempel med före och efter så skulle det bli lättare.
Den nedersta strcat:en verkar felaktig.
/* kopierar text[0..line_start-1] till temp */
strncpy(tmp,text,line_start);
/* lägger till buffer till tmp
tmp är nu text[0..line_start-1] . buffer */
strcat(tmp, buffer);
/* tägger till text[line_start+strlen(buffer) .. 'tills '] till tmp
tmp är nu text[0..line_start-1] . buffer .
text[line_start+strlen(buffer) .. 'tills '] */
strcat(tmp, text+line_start+strlen(buffer));
/*kopiera tillbaks tmp till text */
strcpy(text,tmp);
Vid den sista strcat() är det risk för att du hamnar utanför slutet på texten om längden på buffer är för lång. Dvs att du hamnar bortom '' i text och får därför gamalt skräp från minnet till '' påträffas.
Du borde i stället börja konkateneringen vid text+line_start.
April 1, 2003
ren wrote: Var kommer de konstiga tecknen? I raden du infogar eller nedanför?
Skulle du kunna bifoga ett exempel med före och efter så skulle det bli lättare.Den nedersta strcat:en verkar felaktig.
/* kopierar text[0..line_start-1] till temp */
strncpy(tmp,text,line_start);
/* lägger till buffer till tmp
tmp är nu text[0..line_start-1] . buffer */
strcat(tmp, buffer);
/* tägger till text[line_start+strlen(buffer) .. 'tills '] till tmp
tmp är nu text[0..line_start-1] . buffer .
text[line_start+strlen(buffer) .. 'tills '] */
strcat(tmp, text+line_start+strlen(buffer));
/*kopiera tillbaks tmp till text */
strcpy(text,tmp);
Vid den sista strcat() är det risk för att du hamnar utanför slutet på texten om längden på buffer är för lång. Dvs att du hamnar bortom '' i text och får därför gamalt skräp från minnet till '' påträffas.
Du borde i stället börja konkateneringen vid text+line_start.
aaa
bbb
ccc
och om jag vill ändra bbb till xxx blir det istället:
aaa ûûû*U'u*u-.,.UU
??&%¤xx
hm...vad menar du med konkateneringen vid text+line_start?
🙄
ccc
January 15, 2004
oxiswoofer wrote:
hm...vad menar du med konkateneringen vid text+line_start?
🙄
ccc
Argh! Råkade trycka back efter att ha förhandsgranskat. 🙁
Vad jag menar att först kopieras text[0 .. line_start-1] in i tmp. Sedan kommer bufferten, alltså det som ska in.
sist kommer text[line_start+strlen(buffer) .. 'slutet på text'].
Avsnittet text[line-start .. line_start+strlen(buffer)-1] kommer inte med i tmp.
Vad som dock är värre och orsakar alla skräptecken är att följande.
/* text = "aaanbbbncccn ... "
tmp = "#¤&%¤&%¤¤&&¤ ... ..." <- en massa skräptecken*/
strcpy(tmp, text,line_start);
/* tmp = "aaan¤&%¤¤&&¤ ... ..." */
vid följande strcat så letas första null-tecknet upp i tmp och sedan konkateneras bufferten där.
November 14, 2003
När du deklarerar tmp i insert-funktionen lägg till = "" så ska nog dina konstiga tecken försvinna
char tmp[MAX_ROW*MAX_LINES] = "";
Sen den här raden
strcat(tmp, text+line_start+strlen(buffer));
innebär att du kommer bli av med text i din text[], om du har
aaa
bbb
ccc
och står på rad 2 och lägger till xxx kommer resultatet bli
aaa
xxx
ccc
om du däremot har
strcat(tmp, text+line_start);
kommer resultatet bli
aaa
xxx
bbb
ccc
Men du kanske vill ha det så att den ersätter text?
April 1, 2003
Argh! Råkade trycka back efter att ha förhandsgranskat. 🙁
Vad jag menar att först kopieras text[0 .. line_start-1] in i tmp. Sedan kommer bufferten, alltså det som ska in.
sist kommer text[line_start+strlen(buffer) .. 'slutet på text'].Avsnittet text[line-start .. line_start+strlen(buffer)-1] kommer inte med i tmp.
okej, men hur skall jag fixa det då? hänger itne med rikigt....
1 Guest(s)