Wątek przeniesiony 2014-12-03 10:29 z C/C++ przez ŁF.

Stworzenie pliku, którego nazwa wprowadzana jest z klawiatury

0

Witam. Po nieudanych probach zdecydowalem sie zadac bardzo trywialne pytanie na forum z czego prosze o wybaczenie . Jestem poczatkujacy. Pisze projekt w C i jednym z wymagan jest aby przez podanie nazwy pliku z klawiatury przez uzytkownika zostal otworzony ten konkretny plik. Mam zadeklarowana zmienna przechowujaca nazwe

 char sciezka[7];

i zmienna plik

FILE plik;
plik = fopen(sciezka, "r+"); 

gdy mam tak napisane i majac if-a sprawdzajacego czy dany flik jest otworzony program pisze ze nie jest otworzony.Prosze o pomoc.

1

no a jak wypełniasz tę zmienną sciezka?

0

Sciezka wypelniam tablica charow w postaci np 01.txt

0

W pliku glownym

 char sciezka[6] = pobranie_nazwy(sciezka);
FILE *plik;
	plik = fopen("01.txt", "r+");
	if (plik == NULL) {
		printf("Otwarcie nie powiodlo sie");
		return 1;
	}

i funckja pobranie nazwy

char pobranie_nazwy(char t[]){
	char zn;
	
	
	
		clrscr();
		gotoxy(1, 1);
		printf("Wprowadz 6-znakowy kod w \n");
		
		printf("\nbsciezka  do pliku:");
		for (int i = 0; i < 7; i++){
			gotoxy(1 + i, 4);
			zn = getch();
			if (zn != 13){
				t[i] = zn;
				printf("%c" ,t[i]);
			}
			

		}
	} 
	return t[6]; 
0

Na ile widzę sciezka nie ma znaku zakończenia napisu.

0

Dziekuje za pomoc. Przepraszam za zamieszanie.

0

Jeszcze jedno pytanie. Gdy odczytam nazwe z klawiatury , program wypisze co chce (tutaj dziala ok )a nastepnie pojawia sie przy wyjsciu z programu blad
Run-Time Check Failure #2 - Stack around the variable 'sciezka' was corrupted.
Pokaze glowne elementy skladowe tego programu:

 
do{
...
else if (zn == 'o') {
			sciezka[20] = pobranie_nazwy(sciezka);
			plik = fopen(sciezka, "r+");
			if (plik == NULL) {
				printf("Otwarcie nie powiodlo sie");
				return 1;
			}
			
			
		}
...
}while (zn!='q')

Funkcja pobranie_nazwy ulegla zmianie

char zn;
	int i;
	
	do{
		
		
		printf("\nPodaj sciezke do pliku:");
		for (i = 0; i < 20; i++){
			gotoxy(1 + i, 4);
			zn = getch();
			if (zn != 13){
				t[i] = zn;
				printf("%c" ,t[i]);
			}
			else {
				t[i] = '\0';
				return t[i];
				
				
			}

		}

	} while (i == 20 );
	return t[20];
  

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