[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [CPROG] Hvad går der galt?



Har du et lille tip til hvordan jeg opretter NAMESIZE, så det kan
bruges? Jeg kan sagtens oprette 2 konstanter med hver deres indhold og
bruge det, men kan man også lave en konstant, der indeholder begge dele?

Bør strncpy og strncmp have 81 eller 80 som 3. argument? Det er jo et
spørgsmål om \0 skal være med eller ej.

Egon Petersen
On Thu, 2003-11-06 at 12:47, Peter Makholm wrote:
> Egon Petersen <sslug@sslug> writes:
> 
> Jeg vil i øvrigt ikke undlade at påpege et væld af potentielle fejl og
> sikkerhedshuller.
> 
> > Hej med jer.
> >
> > Af en eller anden grund virker følgende kildetekst ikke:
> >
> > #include <stdio.h>
> > #include <stdlib.h>
> > #include <string.h>
> >
> > int sorterA(char [10][81]);
> >
> > int main(int argc, char *argv[])
> > {
> >   char navn[10][81];
> >   int taeller, res;
> >
> >   for (taeller=0;taeller<10;taeller++)
> >   {
> >     printf("Indtast venligst navn nr. %d: ", taeller+1);
> >     gets(navn[taeller]);
> >   }
> 
> gets() er farlig. Den tjekker ikke at brugeren af programmet ikke
> laver navne på mere end 80 tegn. Hvis de gør så vil dit program lave
> underlige ting. Det vil dels give nogle fejl der er svære at opdage og
> er dels et potentielt sikkerhedshul.
> 
> Brug fgets() istedet.
> 
>     fgets(navn[taeller],81,stdin);
> 
> >       if (strcmp(navn[tael2],navn[tael2+1])>0)
> >       {
> >         strcpy(streng, navn[tael2]);
> >         strcpy(navn[tael2], navn[tael2+1]);
> >         strcpy(navn[tael2+1], streng);
> >       }
> 
> Omtrendt samme problem giver strcmp og strcpy. Her skal du istedet
> bruge strncmp og strncpy der begge tager en størelse som tredje
> argument. 
> 
> Når du nu skal bruge størelsen på dine navnestrenge så mange steder
> kunne det være smart at definerer en NAMESIZE et enkelt sted så du
> ikke laver fejl hvis du pludselig opdager at det kan være nødvendigt
> at behandle navne der er længere.
> 
> 
> Det kan godt være at det virker lidt unødvendigt, men det er bedst at
> træne god programmeringsskik fra begyndelse uanset hvilken størelse
> programmer man laver.
> 
> -- 
>  Peter Makholm     |              I have no caps-lock but I must scream...
>  sslug@sslug |                                               -- Greg
>  http://hacking.dk |                                                      




 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:10 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *