Czy w C jest możliwość tak jak np. w php połączenia 2 zmiennych w nastepujacy sposób:
void otworz_plik(int id){
data = fopen("\jakas\sciezka\" . id . ".txt", "a");
}
Szukalem odpowiedzi ale ciezko mi dopasowac je do swojego problemu.
Czy w C jest możliwość tak jak np. w php połączenia 2 zmiennych w nastepujacy sposób:
void otworz_plik(int id){
data = fopen("\jakas\sciezka\" . id . ".txt", "a");
}
Szukalem odpowiedzi ale ciezko mi dopasowac je do swojego problemu.
Przeskok z PHP do C nie będzie taki przyjemny jak Ci się pewnie wydawało na początku - musisz ręcznie przekonwertować id
na ciąg znaków, a potem dokonać ich konkatenacji.
Ew. wykorzystaj sprintf
, kto co lubi :P
Jest, ale nie tak ładne i wygodne. Musisz użyć funkcji sprintf. Łap linka do dokumentacji z przykładami.
http://www.cplusplus.com/reference/cstdio/sprintf/
Jeżeli jednak c++ też wchodzi w grę to już z klasą string wyjdzie to dużo łatwiej.
Gra. Byłem świadomy tego, że C to bardzo surowy język dlatego też nie spodziewałem się tak łatwego rozwiązania. :P
krzysiek050, niestety C++ nie wchodziło w grę. Dzięki za pomoc!
sprintf ma taką wadę że nie zabezpiecza przed przepełnieniem bufora.
bezpieczniej jest używać snprintf
albo sprintf_s
(obie są w standardzie, ale niestety w praktyce nie zawsze dostępne)
Wezmę pod uwagę. :) A nakierujcie mnie jak powinna wyglądać ta funkcja:
#define PATH "sth/"
char* create_path(int id)
{
char general_path[250];
char s_id[20];
sprintf(s_id, "%d.txt", id);
sprintf (general_path, "%s%s", PATH, room_id);
char *adres = general_path;
return adres;
}
Aby zwracała mi "sth/id.txt" w taki sposób abym mógł użyć tego np. fopen(create_path(id), [...])?
Próbuję jak mogę, ale non stop coś jest nie tak. Aż tak bardzo C jest rygorystyczny?
Teraz masz bzdury straszne, bo zwracasz adres do zmiennej lokalnej. Ja bym to zrobił tak
http://ideone.com/nIHLjz
Rozwiązanie w C++, może Cię to przekona do zmiany jeśli możesz
http://ideone.com/hXDBdu
Wielkie dzięki! Niestety, zmiana na C++ nie wchodzi w grę. A uwierz, chciałbym bardzo bardzo..