Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Ścieżka do pliku

Ostatnio zmodyfikowano 2010-07-13 01:20
Autor Wiadomość
ison
» 2010-06-11 13:42:11
folder tworzysz przez mkdir. np.
C/C++
system( "mkdir \"C:/Program Files/Nowy Folder\"" );

C/C++
printf( "Podaj sciezke\n" );
char sciezka[];
scanf( "%s", sciezka );
char command[];
sprintf( command, "mkdir %s", sciezka );
system( command );
P-17893
dmx81
» 2010-07-05 23:18:23
witam, dla bardziej zaawansowanych pewnie pytanie smieszne, ale ja nigdy tego nie uzywalem, wiec pytam:

int main(int argc, char* argv[])

co wpisujecie w tym nawiasie (odp ze parametry nie wystarczy:P bo na necie wyszukalem odp ze to sluzy do pobierania parametrow do programu z systemu - ale co dokladnie tam wpisac moze byc, jakis przyklad?)

bo tu widze ze uzywacie tego do uzyskania nazwy pliku itd - malan pisze zeby to wykombinowac - ja nie mialem pojecia, ze taki sposob istnieje;P no coz, ciagle sie ucze

czyli inaczej mowiac, do czego moze sie to przydac ijak to wykorzystac( bo nigdy dotad nie musialem podawac parametrow w main)
P-19550
DejaVu
» 2010-07-05 23:24:38
Te zmienne nie służą do zapisywania, tylko odczytywania. Programy są na forum demonstrujące co się znajduje w tych zmiennych. Ponadto w ciągu ostatniego miesiąca o ile się nie mylę była przedstawiona odpowiedź do Twojego pytania na naszym forum.
P-19552
ison
» 2010-07-05 23:26:12
tam przypisywane są wszystkie argumenty przekazane do funkcji main
Pierwszy argument argc oznacza ilość elementów tablicy argv

jeśli uruchamiasz program przez okienkowy Windows Explorer to zawsze będzie miał 1 argument - ścieżkę do pliku wykonywalnego.
argumenty do twojego programu możesz przekazywać dzięki konsoli
w której możesz przykładowo napisać "nazwa_programu.exe pierwszy drugi trzeci". Wtedy zostanie uruchomiony twój program z 4 argumentami

zawartość argv w takim przypadku

<ścieżka do pliku exe>
pierwszy
drugi
trzeci

ponadto jeśli uruchamiasz dany plik swoim programem (tzn. przez opcję Otwieranie za pomocą)
to jako drugi argument będzie przypisana ścieżka do pliku uruchomionego przez twój program


co do przykładu o który prosiłeś to tu masz kod programu, który dodaje do siebie 2 zmienne podane w argumentach
C/C++
#include <cstdio>

int zmienna1, zmienna2;

int main( int argc, char * argv[] )
{
    if( argc < 2 || argc > 4 )
    {
        printf( "Podane zle argumenty\n" );
        return 0;
    }
    sscanf( argv[ 1 ], "%d", & zmienna1 );
    sscanf( argv[ 2 ], "%d", & zmienna2 );
    printf( "Wynik dzialania %d+%d wynosi %d\n", zmienna1, zmienna2, zmienna1 + zmienna2 );
}
tak jak już wspomniałem wyżej program uruchamiasz przez konsolę.
Dzięki cd przechodzisz do ścieżki z programem i uruchamiasz go z 2 dodatkowymi argumentami
tzn

nazwa.exe 5 6
output:

Wynik dzialania 5+6 wynosi 11

jeśli chodzi o jakieś praktyczniejsze zastosowania to wtedy gdy coś cię natchnie i zechcesz napisać program, który będzie obsługiwał twój własny format plików :) przykładowo przechowywanie zdjęć albo nawet samego tekstu tak abyś nie musiał zawsze odpalać swojego programu z określonej ścieżki tylko bezpośrednio klikając na plik z twoim formatem (tak jak .txt jest odpalany przez notepad.exe(mowa oczywiście o Windows'ach))
P-19553
dmx81
» 2010-07-06 00:29:22
dzieki za odp... ale jak w reklamie tp sa  jeszcze nie czuje, nie czuje, a czy to tak szybko jak rozpiac zamek blyskawiczny? ;P podajac
program.exe 3 2 3
 oznacza to, ze program.exe uruchomiony zostanie  z 3 dodatkowymi argumentami, z czego pierwszy to nazwa pliku, a 2 pozostale to 2 i 3?

ps. ta pierwsza trojka oznacza ile chce przekazac argumentow? czy nie musze tego podawac i argc samo sie ustawi w zaleznosci ile dopisze argumentow?

ps2. rozumiem, ze argv[0] to bedzie sciezka do wykonywanego pliku, a nastepne argv to bedzie to, co dopisze

ps3. agrc i argv to nazwy zawsze stale? czy to zalezy od tego co wypisze w main,np
C/C++
int main( int par1, char * par2[] )
ps4. czy musi zawsze to byc zestaw int i char* ?

sorki ze tak mecze :) ale nie mam kogo zapytac, zeby sie dowiedziec, pewnie bardziej to opanuje, jak rzeczywiscie bedzie mi to potrzebne
P-19555
ison
» 2010-07-06 00:37:07

oznacza to, ze program.exe uruchomiony zostanie  z 3 dodatkowymi argumentami, z czego pierwszy to nazwa pliku, a 2 pozostale to 2 i 3?

zgadza się, z trzema dodatkowymi argumentami ale będą one wynosiły 3 2 3
użyłem słowa dodatkowymi bo zawsze argument pierwszy to ścieżka do pliku exe (czyli w sumie będą 4 argumenty)

jak podajesz
nazwa.exe coś jakieś_słowo bla
to będzie tyle argumentów ile podasz słow oddzielając je spacją

liczby argumentów (czyli argc) NIE podajesz

argc jest liczony sam (jeśli nie będzie dodatkowych argumentów to będzie wynosił 1 gdyż jako pierwszy argument będzie podana ścieżka do pliku)



a.exe ala ma kota
wtedy

argc=4
argv[0]=<ścieżka do pliku exe>
argv[1]="ala"
argv[2]="ma"
argv[3]="kota"
P-19556
dmx81
» 2010-07-06 00:42:28
o w miedzy czasie jak pisalem moje ps to odpowiedziales, zerkniesz jeszcze wyzej ?;P dzieki za cierpliwosc i czas


ps - widze,ze i tak odpowiedziales na moje pytania zanim zadalem, dzieki :) mniej wiecej "czuje" pomalu
P-19558
ison
» 2010-07-06 01:05:08
nazwy nie muszą być takie same (ale tak się przyjęło), kolejność i typ zmiennych muszą być zachowane
zapomniałem o jednej rzeczy powiedzieć jeśli chcesz jako argument przekazać słowo w którym wystąpi spacja.
jeśli napiszesz

nazwa.exe Jan Kowalski
to przekazane zostaną 2 dodatkowe argumenty, aby przekazać jeden wystarczy wziąć oba słowa w cudzysłów

nazwa.exe "Jan Kowalski"


p.s. unixy i windowsy mają jeszcze trzeci argument
char * envp[]
 a Mac'i czwarty
char * apple[]
ale to już jest mniej ważne (jak i mniej użyteczne), tyle co ci już powiedziałem w poprzednich postach spokojnie wystarczy :)
nie zapomnij również od czego masz edytor i kompilator... zawsze możesz sam poeksperymentować i sprawdzać co jest przypisane do danej zmiennej
możesz sam sprawdzić co będzie zawierał envp
C/C++
#include <cstdio>

int main( int argc, char * argv[], char * envp[] )
{
    printf( "%p\n", envp[ 0 ] ); //%p jest do HEX
}
ale to już jest i tak bardzo mało istotne dla ciebie i nieciekawe ;)
P-19559
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona