program szyfrujący - cesar

0

Siema ...mam problem z moim programikiem do szyfrowania ;) mianowicie po uruchomieniu wywala sie błąd windowsa. siedzie nad tym juz troche i nie mam pojecia przez co sie wysypuje.

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdlib>

using namespace std;

void szyfruj(char plik[256],char haslo[256])
{
     FILE *wejscie,*wyjscie;
     char znak;
     int klucz=0;
     int ilosc=strlen(haslo);

     for (int i=0;i<ilosc;i++)
     {
         klucz+=(int)haslo[i];
     }
     klucz=klucz%64;
     if (klucz ==0) klucz=43;
     if ( (wejscie=fopen (plik,"r") ) !=NULL)
     {
          wyjscie=fopen("zaszyfrowany.txt","w");
          while( (znak=getc (wejscie) ) !=EOF)
          {
               int przesuniecie=(int)znak;
               przesuniecie+=klucz;
               znak=(char)przesuniecie;

               putc(znak,wyjscie);
          }
     }
     else
     {
          cout<<"Nie udalo sie otworzyc pliku"<<endl;
     }
}

void deszyfruj (char plik[256],char haslo[256])
{
     FILE *wejscie,*wyjscie;
     char znak;
     int klucz=0;
     int ilosc=strlen(haslo);

     for (int i=0;i<ilosc;i++)
     {
          klucz+=(int)haslo[i];
     }
     klucz=klucz%64;
     if (klucz ==0) klucz=43;

     if ((wejscie=fopen(plik,"r"))!=NULL)
     {
          wyjscie=fopen("odszyfrowany.txt","w");
          while((znak=getc(wejscie))!=EOF)
          {
               int przesuniecie=(int)znak;
               przesuniecie-=klucz;
               znak=(char)przesuniecie;
               putc(znak,wyjscie);
          }
     }
     else
     {
          cout<<"Nie udalo sie otworzyc pliku"<<endl;
     }
}

int main(int argc,char **args)
{
     if (argc !=4)
     {
          cout<<"Zly format danych wejsciowych, prawidlowe uzycie: nazwa_pliku haslo -s|-d"<<endl;
     }
     char nazwa_pliku[256];
     char haslo[256];
     char parametr[512];
     strcpy(nazwa_pliku,args[1]);
     strcpy(haslo,args[2]);
     strcpy(parametr,args[3]);
     if (strcmp(parametr,"-s")==0)
     {
          szyfruj(nazwa_pliku,haslo);
     }
     else
     
     if (strcmp(parametr,"-d")==0)
     {
          deszyfruj(nazwa_pliku,haslo);
     }
     else
     
     {
          cout<<"Bledny parametr, mozliwe uzycie -s, -d .";
     }
     return 0;
}

...prosze was pomóżcie

0

Oczywiście, że wywala błąd, ponieważ kopiujesz coś, czego w zasadzie nie ma ;)

     if (argc !=4)
     {
          cout<<"Zly format danych wejsciowych, prawidlowe uzycie: nazwa_pliku haslo -s|-d"<<endl;
     }
     char nazwa_pliku[256];
     char haslo[256];
     char parametr[512];
     strcpy(nazwa_pliku,args[1]);
     strcpy(haslo,args[2]);
     strcpy(parametr,args[3]);

Ładnie wyświetlasz, że nie podano odpowiedniej ilości argumentów, ale mimo to próbujesz z tablicy argv, która posiada mniej, niż 4 elementy kopiować wszystkie 4.

	 if (argc > 2)
     strcpy(nazwa_pliku,args[1]); //dla każdego strcpy

Jeszcze lepiej jest tak (po co kontynuować program, który nie zrobi nic?):

     if (argc !=4)
     {
          cout<<"Zly format danych wejsciowych, prawidlowe uzycie: nazwa_pliku haslo -s|-d"<<endl;
return 0;
     }

1 użytkowników online, w tym zalogowanych: 0, gości: 1