[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
 

Bugg eller tankemiss ??



Hejsan !

Jag har skapat följande lilla program för att kopiera en sträng till en annan.
Eftersom jag använder gets() som levererar en varning om osäkerhet, så tänkte
jag att jag tar och kollar om den inmatade strängen är längre än vad jag har
plats till. Om den är det, så tyckte jag att man kan sätta ett NULL tecken
manuellt och på så sätt unvika buffer overflow. Problemet nu är att det
fungerar delvis. Programmet placerar ett NULL tecken på rätt ställe, men sedan
så krashar det efter att den har skrivit ut strängen. Har inte lyckats klura ut
varför det beter sig på det viset men tänkte att med hjälp av all expertis på
denna lista, så bör man kunna får ett svar på varför det krashar.

#include <source_code.c>
-----------------------------------------------------
#include <stdio.h>
#include <malloc.h>

int min_strlen(char *str);
char* min_strcpy(char * str);


// Huvudrutinen.
void main()
{
  char buff[41];
  char *ny_str;

  int q=0;
  
  puts("Mata in lite text");
  gets(buff);
  

  // Detta verkar inte fungera som tänkt. Programmet krashar
  // vid overflow av bufferten.
  if(min_strlen(buff) >= 39)
    buff[39]='\0';
 
  ny_str=min_strcpy(buff);
  
  puts("Kopian är :");
  puts(ny_str); 

/*  
  while(*ny_str)
  {
      putchar(ny_str[q]);      
      //      putchar(ny_str[40]);
      q++;
  }
*/
  
  free(ny_str);
}



int min_strlen(char *str)
{
  int i=0;
  
  while(*str)
    {
      i++; // i=i+1;
      str++; // str=str+1;
    }
  return(i);
}



char* min_strcpy(char *str)
{
  //  int i=0;
  char *kopia;
  char *retur_kopia;
  
  kopia=(char*)malloc(min_strlen(str)+1*sizeof(char));
  retur_kopia=kopia;

  while(*str)
    {
      *kopia=*str;
      str++;
      kopia++;
    }
  *kopia='\0';
  
  return(retur_kopia);
}



--

/Jocke

ICQ uin: 3939304

----------------------------------------------------------------

***     Linux..... The choice of a thinking generation     *****

----------------------------------------------------------------



 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:07 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] *