[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]![]() |
![]() |
![]() |
|||||||||||||||||||||||||
|
|||||||||||||||||||||||||||
![]() |
![]() |
![]() |
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 |
![]() |
![]() |
![]() |
||||||||||||
|
||||||||||||||
![]() | ||||||||||||||
|
||||||||||||||
![]() |
![]() |
![]() |