[C] Zapis plik w podfolderze

jimarcin
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 14 sty 2009, o 19:45
Podziękował: 3 razy
Pomógł: 1 raz

[C] Zapis plik w podfolderze

Post autor: jimarcin »

Witam,
chciałbym zapisać sobie plik o rozszerzeniu .txt o nazwie nazwa[] do podfolderu saves.
Dlaczemu ten kod nie działa

Kod: Zaznacz cały

char nazwa[20];
	char *sciezka = "saves/";
	char *plik;
	FILE *fp;
	printf("Podaj nazwe pliku:
");
	scanf("%s",&nazwa);

	plik=strcat(sciezka, nazwa);

	sciezka=strcat(plik, ".txt");

	fp=fopen(sciezka,"w");
	fclose(fp);
Awatar użytkownika
Zordon
Użytkownik
Użytkownik
Posty: 4977
Rejestracja: 12 lut 2008, o 21:42
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 75 razy
Pomógł: 910 razy

[C] Zapis plik w podfolderze

Post autor: Zordon »

Kod: Zaznacz cały

scanf("%s",&nazwa);
nazwa jest już wskaźnikiem, powinno byc:

Kod: Zaznacz cały

scanf("%s",nazwa);

A czy to:

Kod: Zaznacz cały

char *sciezka = "saves/";
się w ogóle kompiluje?
jimarcin
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 14 sty 2009, o 19:45
Podziękował: 3 razy
Pomógł: 1 raz

[C] Zapis plik w podfolderze

Post autor: jimarcin »

Kod: Zaznacz cały

char nazwa[30];
	char *plik;
	char *sciezka;
	FILE *fp;
	printf("Podaj nazwe pliku:
");
	scanf("%s",nazwa);
	plik=strcat("saves/", nazwa);
	sciezka=strcat(plik, ".txt");
	fp=fopen(sciezka,"w");
	fclose(fp);
Tego również nie trawi po wpisaniu jakiejś nazwy : /
abc666

[C] Zapis plik w podfolderze

Post autor: abc666 »

Zordon pisze: A czy to:

Kod: Zaznacz cały

char *sciezka = "saves/";
się w ogóle kompiluje?
To jest poprawny fragment kodu. Dla łańcucha "saves/" rezerwowane jest miejsce a następnie wskaźnik do tego miejsca jest przekazywany do sciezka.

Kod: Zaznacz cały

plik=strcat("saves/", nazwa);
No to to już nie może działać. Dla plik nie została przydzielona pamięć.

Kod: Zaznacz cały

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

int main()
{
char nazwa[50];
char sciezka[80] = "saves/";
   FILE *fp;
   printf("Podaj nazwe pliku:
");
   scanf("%s",nazwa);

   strcat(sciezka, nazwa);

  strcat(sciezka, ".txt");
  printf("%s
", sciezka);
  fp=fopen(sciezka,"w");
  if(fp!=NULL)   
     fclose(fp);
}
strcat() modyfikuje pierwszy argument, więc nie ma co robić zmiennych pomocniczych.
Mamy

Kod: Zaznacz cały

char sciezka[80] = "saves/";
zamiast

Kod: Zaznacz cały

char *sciezka = "saves/";
ponieważ druga instrukcja rezerwuję tylko tyle pamięci ile jest potrzebne, a potrzeba będzie przecież sporo więcej.
ODPOWIEDZ