B

Potrzebujesz pomocy z C, C++, perl, python, itp.
Grzesiok
Posty: 15
Rejestracja: 02 maja 2008, 20:54

Błąd w kodzie programu --- strcpy

Post autor: Grzesiok »

witam jestem użytkownikiem Debiana od 2 dni, wcześniej około półroku miałem Ubuntu.
Więc od razu wziąłem się za pisanie programiku z konsoli do robienia backupu, w sumie to aby się nauczyć trochę więcej o programowaniu :)

Oto kod: (na razie nic specjalnego niema ale to dopiero początek)

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <sys/un.h>

// katalogi
#include <dirent.h>

// obsługa błędów
#include <errno.h>

struct cmd_sys
{
	int action;
	char * miejsce_docelowe;
	int * param_item, param_max;
};

//definicje główne
//#define CMD_PARAM_ACTION 1

//definicje akcji
#define ACTION_BACKUP 100
#define ACTION_RESTORE 101

//dane do analizy
#define ACTION_SYSTEM_LOG 1000
#define ACTION_SYSTEM 1001
#define ACTION_ALL 1002

void help(void)
{
	printf("\nhelp\n");
}

/*void copy(char * dest, char * source)
{
	int max = strlen(source);
	for(int i = 0;i < max;i++)
		*dest++ = *source++;
	*dest = '\0';
}*/

int main(int argc, char* argv[])
{
	if(argc > 1)
	{
		cmd_sys* cmd = new cmd_sys;
		cmd->action = cmd->param_max = 0;//for(int j = 0;j < argc;j++) printf("%s\n", *argv++);
		//cmd->param_item = new int;
		//strcat(cmd->miejsce_docelowe, "null");
		int i = 2, cmd_param = 0;

		*argv++;
		if(strcmp(*argv, "backup") == 0) cmd->action = ACTION_BACKUP; else
		if(strcmp(*argv, "restore") == 0) cmd->action = ACTION_RESTORE;

		while(argc > i++)
		{
			*argv++;
			if(strcmp(*argv, "--system-log") == 0) cmd_param = ACTION_SYSTEM_LOG; else
			if(strcmp(*argv, "--system") == 0) cmd_param = ACTION_SYSTEM; else 
			if(strcmp(*argv, "--all") == 0) cmd_param = ACTION_ALL;
		}

		DIR* katalog = opendir(*argv);
		if(katalog)
		{
			closedir(katalog);
			strcpy(cmd->miejsce_docelowe, *argv);
		} else return 1;

		if(cmd->action != 0)
		{
			printf("\nakcja:%d\nkatalog:%s\n", cmd->action, cmd->miejsce_docelowe);
		} else help();
		delete cmd;
	} else help();
	return 0;
}
i problem zaczyna się przy funkcji strcppy gdyż podczas uruchomienia pisze że Naruszenie ochrony pamięci.
Głowiłem się nad tym i próbowałem to samo zrobić za pomocą memcpy ale też to samo także strcaat wywala ten sam błąd.

Wszystko kompilowane w g++ gdyż bardziej pod c++ pisane było

Jeśli ktoś wie to bardzo proszę o pomoc :)

Pozdrawiam Grzesiok

P.S. napisałem własną funkcje copy ale wywala ten sam błąd.

.

[ Dodano: 2008-05-04, 18:58 ]
niewiedziałem alepokombinowałem i wyszło n to

Kod: Zaznacz cały

DIR* katalog = opendir(*argv); 
        if(katalog) 
        { 
            cmd->miejsce_docelowe = new char;
            closedir(katalog); 
            strcpy(cmd->miejsce_docelowe, *argv); 
        } else return 1;
Pozdrawiam i w takim wypadku sorki za spam ;)
ODPOWIEDZ