doklejanie do zmiennej / laczenie charow

0

Witam jestem poczatkujacy w c++ i tym bardziej nie moge dojsc do dlaczego moj kod dziala tak jak dziala

kod:

 
char ListFiles(char *src){
	struct dirent* pozycja=0; 
	char *fileName;
	char *newfilename = src;
	char *sep = "\\";
	strcat(newfilename, sep);
	DIR* folder = opendir(src);
	char *tmpname = newfilename;
	while (pozycja=readdir(folder)){	
				
		fileName=(*pozycja).d_name;		
		
		tmpname = strcat(tmpname, sep);
		
		cout << "1 " << tmpname << "\n" ; 
		tmpname = newfilename;
		cout << "2 " << tmpname << " " << fileName <<  "\n" ;
	}
}

chce napisac rekurecyjna funkcje do przegladania kataogow

tmpname = strcat(tmpname, sep);
wiem ze ta funkcja strcat laczy ze soaba chary w jeden i dziala ok
tylko za drugim wywolaniem petli tmpname ma wartosc z poprzedniego przejscia nawet gdy tmpname zadeklaruje w petli

czy kos wie dlaczego tak moze sie dziac?

user image

0

Powód jest prosty. Nie masz pojęcia o używaniu c-stringów, ani w nie umiesz używać wskaźników.
Dodatkowo zapewne piszesz po nie swojej pamięci. char *newfilename = src pewnie nie robi tego co Ci się wydaje, podobnie jak z tym przypisaniem tmpname = strcat(tmpname, sep);

Mieszasz C z C++. Skoro piszesz w c++ to czemu nie użyjesz std::string? Skoro jednak chcesz użyć c-stringów to o nich poczytaj, poczytaj o wskaźnikach.

0

tmpname to wskaźnik, więc nie ma tutaj wielkiego znaczenia gdzie go zadeklarujesz, wskazuje on na miejsce, w którym znaków ciągle przybywa. Poza tym pomyślałeś o zarządzaniu pamięcią? Doklejasz ciągle tam, gdzie jest src, ile masz tam zaalokowanej pamięci? Dodatkowo modyfikujesz obszar, który był przekazany jako argument funkcji, to mało intuicyjne.

Dlaczego nie zainteresujesz się std::string?

0

chcialbym uzyc sringa ale nie moge bo w opendir dostaje taki blad
cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '1' to 'DIR* opendir(const char*)'

wiec musialem zrobic to tak pocztym wiecej o tych c-stringach i o wskaznikach to moze bd wiedzial wiecej :)

0

Jak najbardziej możesz użyć std::string, tylko o nim też musiałbyś coś poczytać wcześniej. Ma np. taką metodę jak c_str().
Mimo wszystko naucz się c-stringów, poprawnie nimi posługiwać, wskaźników. To wymusi nauczenie się zarządzania pamięcią i tylko na tym zyskasz.

0

dzieki za pomoc
jestem poczatkujacy w c++ i musze sie duzo nauczyc o tych typach danych i w ogole

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