Hej Det är svårt att se bara så där... Till att börja med skall du i alla fall ha en avslutande "" i arrayen. Mitt störtsta problem är while satsen. Det är meningen att jag ska kolla om ordet jag skrev in finns med i arrayen. Finns ordet så avslutas lopen. Det du skriver i andra jämförelsen är att pekar s på 0 - dvs är minnesadressen till **s 0, och det blir den aldrig. Hej Niklas. Tack för alla tips. Har skrivit om koden lite nu. Du kunde behållt pekaren: Problemet ligger i att när pekaren har gått igenom alla fält. Så går den ytterliggare ett steg, dvs så den hamnar utananför minessadressen. Dvs den går ett extra varv i loopen. Som väntat...jämför textsträng med fält
Jag jämför en textsträng med ett fält enligt nedanstående kod.
Får dock inte det hela att fungera.
<code>
int main (void){
char *s, ord[20], *reserv[] = {"auto", "break", "case", "char", "const", "volatile", "while"};
printf("Skriv ett ord: ");
fflush(stdin);
gets(ord); //läs in textsträngen
s = *reserv; //peka på försat ellementet
while ((strcmp (ord, s) != 0) || (*s !='\0')) { //är ord lika med s eller har vi kommit till NULL
s++; //stega ett steg framåt
}
if (strcmp (ord, s) == 0) /fanns ordet med i fältet ? JA
printf("Du har skrivit ett reserverat ord");
else //nej
printf("Inget reserverat ord");
while (!KeyHit()){;}
return 0;
}
</code>
har ni tips på hur jag får det att fungera?Sv: jämför textsträng med fält
Sedan bör
if (strcmp (ord, s) == 0)
nog istället vara
if (*s!=0)
av effktivitetsskäl.
--
Märkte ett stort fel: s skall vara av typen char **
/Niklas JanssonSv: jämför textsträng med fält
Tyvärr så fungerar inte lopen, lopen ska även avslutas då vi har kollat igenom alla fält! Har du några tips på hur jag ska ändra i koden?
while ((strcmp (ord, *s) == 0) || (*s !=0)){
s++;
}
Om jag skriver på följadne sätt så avbryts loopen om mitt ord som jag skriver in finns med i arrayen
while (strcmp (ord, *s)){
s++;
}
Men hur gör jag för att få med (*s !=0) dvs om jag har gått igenom hela arrayen och ordet inte fanns med ska lopen avslutas.Sv: jämför textsträng med fält
while ((strcmp (ord, *s) == 0) || (**s !=0))
s++;
(Jag skulle nog iofs använt en for-sats...)
Sen måste du naturligtvis ha med tomma strängen sist.
*reserv[] = {"auto", "break", "case", "char", "const", "volatile", "while", ""};
/Niklas JanssonSv: jämför textsträng med fält
<code>
int main (void){
char ord[20], *reserv[] ={"auto", "break", "case", "char", "const", ""};
int i;
printf("Skriv ett ord: ");
fflush(stdin);
gets(ord);
for(i=0; *reserv[i]; i++) {
if(!strcmp(ord, reserv[i]))
printf("Du har skrivit ett reserverat ord");
}
printf("Du har inte skrivit ett reserverat ord");
while (!KeyHit()){;}
return 0;
}
Problemet är nu att skriver jag in ett ord som inte finns med i arrayen får jag följande felmedelande.
Deference of out-of -bounds pointer: 1 bytes past end of array.
Får för övrigt samma felmedelande om jag skriver ett ord som finns i arrayen.
Har någon tips på hur jag gör för att modifiera loopen.?Sv: jämför textsträng med fält
for(p=reserv; **p; p++)
Jag ser inte felet bara så här...
Prova att skriva ut varje ord en gång i loopen, så ser du när det händer (antagligen sist).
Du bör dessutom ha
if(!strcmp(ord, reserv[i]))
{
printf("Du har skrivit ett reserverat ord");
break;
}
Så bryts den om det inte går rätt till.
Beskriv var felet händer lite noggrannare så kanske det hjälper.
/Niklas JanssonSv: jämför textsträng med fält
Sv: jämför textsträng med fält
Prova att lägga till ett extra "" på slutet.
Kolla nu när den bryter.
Det är förmodligen ett fel i jämförelsen någonstans. Kan vara att dereferenseringen av pekaren inte är rätt...
Prova med olika varianter på antalet ^.
/Niklas Jansson