C programmering: insert funktion fel|Programmering / Grafisk formgivning|Forum|Nordichardware

Search
Forum Scope


Match



Forum Options



Minimum search word length is 3 characters - maximum search word length is 84 characters
Lost password?
The forums are currently locked and only available for read only access
sp_Feed sp_TopicIcon
C programmering: insert funktion fel
oxiswoofer
Member
Medlem
Forum Posts: 2101
Member Since:
April 1, 2003
sp_UserOfflineSmall Offline
1
December 21, 2004 - 11:53 am
sp_Permalink sp_Print

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...

ren
Kommer du hit ofta?
Medlem
Forum Posts: 833
Member Since:
January 15, 2004
sp_UserOfflineSmall Offline
801853
December 21, 2004 - 12:16 pm
sp_Permalink sp_Print

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.

oxiswoofer
Member
Medlem
Forum Posts: 2101
Member Since:
April 1, 2003
sp_UserOfflineSmall Offline
801882
December 21, 2004 - 12:39 pm
sp_Permalink sp_Print

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
??&%¤&#&#xxx

hm...vad menar du med konkateneringen vid text+line_start?
🙄
ccc

ren
Kommer du hit ofta?
Medlem
Forum Posts: 833
Member Since:
January 15, 2004
sp_UserOfflineSmall Offline
801946
December 21, 2004 - 1:41 pm
sp_Permalink sp_Print

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.

nv98ling
Mina inlägg skrivs i binär kod
Medlem
Forum Posts: 139
Member Since:
November 14, 2003
sp_UserOfflineSmall Offline
802134
December 21, 2004 - 4:00 pm
sp_Permalink sp_Print

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?

oxiswoofer
Member
Medlem
Forum Posts: 2101
Member Since:
April 1, 2003
sp_UserOfflineSmall Offline
802225
December 21, 2004 - 5:32 pm
sp_Permalink sp_Print

nv98ling: jo jag vill att text skall försvinna, iden med funktionen e att man skall ersätta text, så texten på raden ovanför skall försvinna =)
tack för att du sa att jag skulle lägga till = "" , det hade jag glömt

oxiswoofer
Member
Medlem
Forum Posts: 2101
Member Since:
April 1, 2003
sp_UserOfflineSmall Offline
802234
December 21, 2004 - 5:43 pm
sp_Permalink sp_Print

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....

ren
Kommer du hit ofta?
Medlem
Forum Posts: 833
Member Since:
January 15, 2004
sp_UserOfflineSmall Offline
802590
December 21, 2004 - 11:26 pm
sp_Permalink sp_Print

oxiswoofer wrote:

okej, men hur skall jag fixa det då? hänger itne med rikigt....

se nv98lings inlägg.

oxiswoofer
Member
Medlem
Forum Posts: 2101
Member Since:
April 1, 2003
sp_UserOfflineSmall Offline
803617
December 23, 2004 - 1:50 pm
sp_Permalink sp_Print

har löst de nu på ettt annat sätt....använde min delete funktion o senn la till text..så nu fungerar det! tack för hjälpen

Forum Timezone: Europe/Stockholm
Most Users Ever Online: 1030
Currently Online:
Guest(s) 280
Currently Browsing this Page:
1 Guest(s)
Top Posters:
Andreas Galistel: 16287
Jonas Klar: 15897
ilg@dd: 10810
Nyhet: 10607
Mind: 10550
Ctrl: 10355
Gueno: 9881
Guest: 9344
Snorch: 8881
Callister: 8468
Newest Members:
PetrbonFU PetrbonFU
Karine Bembry
Dolores Mcdaniels
Anibal McLeish
Francisca Alt
Alfie Everhart
Lester Huitt
Orlando Jorgensen
Mikki Lundgren
Dakota Kozlowski
Forum Stats:
Groups: 11
Forums: 59
Topics: 146630
Posts: 1300967

 

Member Stats:
Guest Posters: 2
Members: 79425
Moderators: 0
Admins: 11
Administrators: nordicadmin, Henrik Berntsson, Anton Karmehed, Carl Holmberg, Joel Oscarsson, Mikael Linnér, Mikael Schwartz, Andreas Paulsson, Nickebjrk, Mattias Pettersson, EmxL