GIANNISPATRA Δημοσ. 27 Ιανουαρίου 2008 Δημοσ. 27 Ιανουαρίου 2008 Χαιρετώ λοιπόν έχω ψάξει όλο το ίντερνετ να μου δώσει έναν κατατοπιστικό οδηγό για να καταλάβω τι είναι οι δύο παράμετροι που βάζουμε στη main ( int argc , char *argv[] ) Μπορεί να μου εξηγήσει κάποιος τι κάνουνε ?? Κάτι για γραμμή διαταγών κλπ ..λέει δεν καταλαβαίνω τίποτα όμως... Ευχαριστώ εκ'των προτέρων ..
system Δημοσ. 27 Ιανουαρίου 2008 Δημοσ. 27 Ιανουαρίου 2008 το argc (η πρωτη παραμετρος) ειναι ενας ακεραιος που δειχνει τον αριθμο των διαθεσιμων ορισματων γραμμης εντολων. το επομενο (char* argv[]) πως βλεπεις απο τον ορισμό του ειναι μια διαταξη δεικτων προς συμβολοσειρες. argv[1],argv[2] θα ειναι αντιστοιχα το πρωτο κια το δευτερο ορισμα που θα εισαγεις εσυ μεσω γραμμης εντολων μετα το ονομα του εκτελεσιμου. επισης μπορεις να δωσεις οτι ονοματα θελεις εσυ τα argc kai argv δεν ειναι στανταρ
GIANNISPATRA Δημοσ. 27 Ιανουαρίου 2008 Μέλος Δημοσ. 27 Ιανουαρίου 2008 ναι δεν καταλαβαίνω όμως πως τα χρησιμοποιούμε .... δηλαδή τι είναι τα διαθέσιμα ορίσματα γραμμής εντολών και και το γιατί να χρησιμοποιήσω argv αντί για gets ? sorry αλλά τα έχω μπερδέψει λίγο ...
FrAcTaL-gR Δημοσ. 27 Ιανουαρίου 2008 Δημοσ. 27 Ιανουαρίου 2008 η εισαγωγή των strings με την gets γίνεται κατά τη διάρκεια εκτέλεσης του προγράμματος, ενώ όταν χρησιμοποιείς τα ορίσματα της γραμμής εντολών argc-argv, (από την κονσόλα δηλαδή) τότε τα strings εισάγονται με την έναρξη της εκτέλεσης, όταν δηλαδή καλείται η main.
system Δημοσ. 27 Ιανουαρίου 2008 Δημοσ. 27 Ιανουαρίου 2008 ναι , επισης να θυμασαι πως στο argv[0] παντα αποθηκευεται μια τιμη (ονομα του προγραμματος νομιζω), οποτε διαβασεις τα ορισματα σου απο κει και περα, και συνεπως το argc ειναι παντα >=1
GIANNISPATRA Δημοσ. 28 Ιανουαρίου 2008 Μέλος Δημοσ. 28 Ιανουαρίου 2008 ok ευχαριστώ πολύ για τις απαντήσεις σας ..
StavrosD Δημοσ. 8 Φεβρουαρίου 2008 Δημοσ. 8 Φεβρουαρίου 2008 Χαιρετώ λοιπόν έχω ψάξει όλο το ίντερνετ να μου δώσει έναν κατατοπιστικό οδηγό για να καταλάβω τι είναι οι δύο παράμετροι που βάζουμε στη main( int argc , char *argv[] ) Μπορεί να μου εξηγήσει κάποιος τι κάνουνε ?? Κάτι για γραμμή διαταγών κλπ ..λέει δεν καταλαβαίνω τίποτα όμως... Ευχαριστώ εκ'των προτέρων .. Απλά αν τρέξεις το πρόγραμμα test.exe ως εξής: test myfile.tst -a -h -b Τότε το argc θα είναι ίσο με 4 (πλήθος παραμέτρων) και το argv: argv(0) θα έχει την τιμή "myfile.tst" argv(1) θα έχει την τιμή "-a" argv(2) θα έχει την τιμή "-h" argv(3) θα έχει την τιμή "-b"
Directx Δημοσ. 8 Φεβρουαρίου 2008 Δημοσ. 8 Φεβρουαρίου 2008 Απλά αν τρέξεις το πρόγραμμα test.exe ως εξής: test myfile.tst -a -h -b Τότε το argc θα είναι ίσο με 4 (πλήθος παραμέτρων) και το argv: argv(0) θα έχει την τιμή "myfile.tst" argv(1) θα έχει την τιμή "-a" argv(2) θα έχει την τιμή "-h" argv(3) θα έχει την τιμή "-b" Περίπου (πρόσεξε τι έγραψε παραπάνω ο System), το argv[0] υποδεικνύει την πλήρη διαδρομή εκκίνησης της εφαρμογής (τουλάχιστον σε DOS & Windows compilers), δηλαδή στην περίπτωση του test το argv[0] = test.exe, οπότε: > argv(0) θα έχει την τιμή test.exe argv(1) θα έχει την τιμή "myfile.tst" argv(2) θα έχει την τιμή "-a" argv(3) θα έχει την τιμή "-h" argv(4) θα έχει την τιμή "-b" Το παρακάτω πρόγραμμα (σε C/C++ Builder 6.0 -ANSI C mode), επιστρέφει το argc/argv που εισάγει ο χρήστης (μαζί με το argv[0] που παρέχεται από το Σύστημα). > /*-ARGC/ARGV LIST Directx----------------------------------------------------*/ #include <stdio.h> #ifdef __BORLANDC__ #pragma hdrstop #endif /*---------------------------------------------------------------------------*/ #ifdef __BORLANDC__ #pragma argsused #endif int main(int argc, char* argv[]) { int nArgc; for(nArgc=0;nArgc<argc;nArgc++) printf("argv[%d] = %s\n",nArgc,argv[nArgc]); printf("Press Enter to resume.."); getchar(); return 0; } /*---------------------------------------------------------------------------*/
StavrosD Δημοσ. 8 Φεβρουαρίου 2008 Δημοσ. 8 Φεβρουαρίου 2008 Ευχαριστώ για την διόρθωση. Τελευταία φορά που μου είχε χρειαστεί ήταν πριν από 7-8 χρόνια και αρχίζω να ξεχνάω. Καταραμένα γεράματα.
narbi Δημοσ. 18 Ιουνίου 2008 Δημοσ. 18 Ιουνίου 2008 Συγγνώμη που ξεθάβω το θέμα, αλλά έχω μια απορία πάνω σε αυτό το θέμα και είπα να το συμπληρώσω από το να ανοίγω νέο τόπικ. Προσπαθώ να φτιάξω μια εντολή για minix σε C και θέλω από έναν δισδιάστατο argv τύπου char να διαβάζω μια παράμετρο μιας εντολής (πχ. command -a),αλλά δε μου βγαίνει και μάλλον συμβαίνει γιατί αγνοώ κάτι στη σύνταξη της argv.Στον κώδικά μου το δηλώνω: main(int argc,char **argv) κι έχω προσπαθήσει να διαβάσω στην If την παράμετρο στον argv είτε: if (argv[1][0] = '-a') είτε if (argv[1] = '-a') είτε if (argv[2] = '-a') είτε if (argv[1][0] = '-''a') αλλά με καμία δε μου δούλεψε στην εκτέλεση. Η εκτέλεση σκέτου του command πάντως δουλεύει. Μήπως γνωρίζει κανείς πως πραγματικά πρέπει να γίνει η σύνταξη? Ευχαριστώ προκαταβολικά!
ippo00 Δημοσ. 18 Ιουνίου 2008 Δημοσ. 18 Ιουνίου 2008 δεν έδωσα καν σημασία στο τι κάνεις εκεί αλλά έλεγχο ισότητας σε C κάνεις με == και όχι =
parsifal Δημοσ. 18 Ιουνίου 2008 Δημοσ. 18 Ιουνίου 2008 Και επίσης, έλεγχο ισότητας για strings κάνεις με την strcmp. Το "-a" δεν είναι ένας χαρακτήρας μόνο, για να αποθηκεύεται στο argv[1][0]...
karabouzouk... Δημοσ. 18 Ιουνίου 2008 Δημοσ. 18 Ιουνίου 2008 Νομίζω ότι όταν δηλώνεις συμβολοσειρά και όχι χαρακτήρα μετά τη μεταβλητή βάζεις "[ ]"....Δηλαδή έτσι void main (int argc, char *argv[]) Για το δυσδιάστατο δε νομίζω ότι γίνεται κάτι τέτοιο και δε βλέπω να υπάρχει και νόημα... Στη σύγκριση που κάνεις δυο σημβολοσειρών στην ουσία, δεν νομίζω ότι λειτουργεί έτσι.. χρειάζεται την strcmp που το κάνει αυτό..Δηλαδή αποθηκεύεις το -α κλπ σε μια μεταβλητή και μετά τα συγκρίνεις με την argv έτσι..: if (strcmp(password, argv[κάτι]) =0) {.... αν δηλαδή είναι ίσα τότε μπαίνει στην if... αρχάριος είμαι αλλά ελπίζω να βοήθησα.... edit με πρόλαβαν..!
ippo00 Δημοσ. 18 Ιουνίου 2008 Δημοσ. 18 Ιουνίου 2008 > #include <stdio.h> int main(int argc, char **argv) { if(argc>1) if((argv[1][0] == '-') && (argv[1][1] == 'a') && (argv[1][2] == '\0')) printf("Correct Argument\n"); return 0; } Εναλλακτικά
narbi Δημοσ. 18 Ιουνίου 2008 Δημοσ. 18 Ιουνίου 2008 το = αντί για == ήταν τυπογραφικό λάθος που έγινε όταν έγραφα το ποστ και το οποίο αναπαράχθηκε με τα copy - paste που έκανα και δεν το παρατηρήσα. Οι παρατηρήσεις και οι συμβουλές σας όμως ήταν πολύ χρήσιμες. Και η συμβολή για το strcmp που έχω δει και σε άλλα sources του minix να χρησιμοποιείται και και ο κώδικας του ippo. Το char **argv όμως έχω δει σε διάφορες main -τουλάχιστον στο Minix- να δηλώνεται έτσι. Χωρίς [].Τα δοκιμάζω και στην πράξη και ξαναποστάρω για το ποιον κώδικα χρησιμοποίησα τελικά. Σας ευχαριστώ όλους!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.