Avatar billede djones Nybegynder
05. juli 2005 - 15:06 Der er 10 kommentarer og
1 løsning

char array i function "Segmentation fault"

I nedenstående kode opstår en segmentation fault når jeg forsøger at strcpy(fileout,infile)... infile og fileout er begge af varierende størrelse, så det er ikke muligt at sætte disse til en bestemt størrelse...
Der er et tilfælde tidligere hvor strcpy(file,argv[2]) virker fint, så jeg kan ikke se hvorfor det ikke virker begge steder..
hvordan løser jeg dette?

#include <stdio.h>
#include <string.h>

void printhelp();
int encode(char infile[]);
int decode(char infile[]);

int main(int argc, char *argv[])
{
  // if cmdline is "ed.bin -e afile oops" or "ed.bin"
  if (argc != 3)
  {
      printhelp();
  }
  else
  {
      char file[] = "",dash,arg;
      dash = argv[1][0];
      arg = argv[1][1];
      strcpy(file,argv[2]);
      printf("file is set to: %s\n",file);
      if (dash == '-' && (arg == 'e' || arg == 'd') && file != "")
      {
        printf("You have chosen to %c: %s\n",arg,file);
        if (arg == 'e')
    {
        if (encode(file) == 1)
          printf("An error occured during encoding!\n");
    }
        else
    if (arg == 'd')
    {
        if (decode(file) == 1)
          printf("An error occured during decoding!\n");
    }
    else
        printhelp();
      }
      else
        printhelp();
  }
  printf("Program exiting...\n");
  return 0;
}

void printhelp()
{
  printf("UDSAT FOR CENSUR\n");
}

int encode(char infile[])
{
  char password[] = "";
  printf("File to encode is: %s\n",infile);
  printf("Enter password: ");
  scanf("%s",password);
  printf("Password is: %s\n",password);
  if (password != "")
  {
      printf("The password entered is: %s\n",password);
      FILE *fin,*fout;
      int in,out,count,passchar;
      char fileout[] = "";
      char ext[] = ".ed";
      printf("just before fileout is setup\n");
      //strcpy(fileout,infile);
      //strcat(fileout,infile);
      //fileout = infile;
      // når jeg når hertil og prøver med en af de ovenstående 3 kommandoer, får jeg "segmentation fault" af programmet.... hvad gør jeg galt? formålet er at jeg vil have fileout = infile + ext
      int i;
      i = 0;
      while ((fileout[i] = infile[i]) != '\0')
        i++;
      printf("1\n");
      strcat(fileout,ext);
      printf("file: %s\next: %s\nfileout: %s\n",infile,ext,fileout);
      count = 0;
      if ((fin = fopen(infile,"r")) != NULL)
        if ((fout = fopen(fileout,"w")) != NULL)
            while ((in = fgetc(fin)) != EOF)
        {
          if (count = strlen(password))
              count = 0;
              passchar = password[count];
          out = //censur;
          if (fputc(out,fout) == EOF)
              printf("ERROR\n");
          count++;
        }
      fclose(fin);
      fclose(fout);
      printf("Encoding done!\n");
      return 0;
  }
  else
      return 1;
}

int decode(char infile[])
{
  char password[] = "";
  printf("File to decode is: %s\n",infile);
//  if (getpassword(*password) == 0)
  if (password != "")
  {
      printf("The password entered is: %s\n",password);
      printf("Decoding done!\n");
      return 0;
  }
  else
      return 1;
}
Avatar billede arne_v Ekspert
05. juli 2005 - 15:10 #1
prøv lige

char file[100] = "",dash,arg;
Avatar billede djones Nybegynder
05. juli 2005 - 18:39 #2
hmmm... det ser ikke ud til at virke... så vidt jeg kan se, ligger problemet i at jeg giver encode et char-array som parameter, og prøver at kopiere data herfra, hvilket får programmet til at lave en fejl..
Avatar billede arne_v Ekspert
05. juli 2005 - 19:17 #3
char fileout[] = "";

skal jo også være

char fileout[200] = "";
Avatar billede djones Nybegynder
05. juli 2005 - 19:48 #4
virker stadigvæk ikke
Avatar billede arne_v Ekspert
05. juli 2005 - 19:50 #5
og

char password[] = "";

til

char password[50] = "";
Avatar billede arne_v Ekspert
05. juli 2005 - 19:50 #6
hvor dør den nu ?
Avatar billede djones Nybegynder
05. juli 2005 - 19:56 #7
JACKPOT!!!! hvordan dælen kan password have noget at gøre med det???
Avatar billede arne_v Ekspert
05. juli 2005 - 20:00 #8
det er samme fejl

char password[] = "";

allokerer plads til ingenbogstaver og en terminerende nul byte

getpassword(*password)

læser ind hvor der ingen plads er
Avatar billede arne_v Ekspert
05. juli 2005 - 20:01 #9
nu vi er ved det - skal

if (getpassword(*password) == 0)
  if (password != "")
  {

ikke være:

if (getpassword(password) == 0)
  if (strcmp(password,"")!=0)
  {
Avatar billede djones Nybegynder
05. juli 2005 - 20:03 #10
ok takker :)
læg et svar så du kan få pointsene.
og yderligere rettelser er velkomne :)
Avatar billede arne_v Ekspert
05. juli 2005 - 20:06 #11
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester