begin process at 2012 05 29 06:34:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

Eternel problème...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Eternel problème...

mercredi 5 mars 2008 à 12:51:02 | Eternel problème...

dayvid75014

Bonjour à tous,

Voici un ptit bout de code, ayant pour but de récupérer un flux en héxa d'un fichier MPEG et d'en tirer des informations (en-tête, ID, ...). Le main commence par : 

char *ip_filepath;        // Récupération de la ligne de commande
 ...
 ...
 ...
 ... 
int main(int argc, char *argv[])
{
 if (argc == 1)
 {  display_usage();
  exit_prog(""); }

 while ((argc > 1) && (argv[1][0] == '-')) {
  switch (argv[1][1]) {
  case 'i':
   ip_filepath = &argv[1][2];
   break;
  case 'p':
   search_Packet_Identification = atoi(&argv[1][2]);
   break;
  case 'q':
   quite_mode = 1;
   break;
  default: 
   printf("Bad option %s\n", argv[1]);
   display_usage();
   exit_prog("");
  }
  ++argv;
  --argc;
 }

ip_file_length = get_ip_file_length(ip_filepath);
printf("Opening MPEG-2 file %s, %d bytes.\n", ip_filepath, ip_file_length);
printf("Search PID : %d", search_PID);
ip_file = fopen(ip_filepath, "rb");

char menu_choice = 0;

find_TS_sync_byte(); 
display_sync_byte_table();  // display location of sync_bytes
fseek(ip_file, sync_bytes[1], 0); // go back to first sync_byte
menu_choice = menu(); // display menu options
switch (menu_choice) // decode menu choice
 {
 case '1' : // TS header decode
 menu_option1();
 break;
 case '2' : // PID address table
 menu_option2();
 break;
 case '3' : // Save PID address table
 menu_option3();
 break;
 case '4' : // Extract PES
 menu_option4();
 break;
 case '5' : // exit
 exit_prog("");
 break;
 default:
 puts("\nERROR : Not a valid menu entry.");
 }
 exit_prog("");
 return 0;
}


Je ne comprends pas du tout les lignes/portions de code suivantes :

1) while ((argc > 1) && (argv[1][0] == '-'))

2) argv[1][1])

3) search_PID = atoi(&argv[1][2]);

4) pourquoi menu() est tout seul ? Erreur de compilation...

Quelqu'un pourrait-il m'expliquer <souligne>clairement</souligne> en faisant référence au problème de base ? (récupération d'information d'un flux MPEG en héxa en indiquant le chemin du fichier mpeg monfichier.mpg présent sur l'ordi.

Je suis au courant qu'il y a un tuto sur les paramètres de la fonction main, MERCI mais il ne répond pas à mes interrogations..

Je suis prêt à éclaircir tous points obscurs, après la pause déjeuner ;-)

Bonne journée à tous et merci à tous ceux qui voudront bien m'aider.

mercredi 5 mars 2008 à 13:11:03 | Re : Eternel problème...

dayvid75014

excusez-moi, je n'ai pas trouvé les balises de codes ... :s

mercredi 5 mars 2008 à 13:30:51 | Re : Eternel problème...

Pistol_Pete

Réponse acceptée !
Salut

Bon je vais tenter de repondre clairement a tes questions:
Deja avant de commencer il faut que tu saches que argc correspond au nombre de parametre passer a la fonction main et argv, est un char** qui stoke les noms des arguments.

Par exemple, si tu lance ton exe en ecrivant cette ligne de code:
MonExe -s test q
il y aura dans argv[0][]: la chaine de caractere  "MonExe"
argv[1][]: -s
argv[2][]: test
argv[3][]: q

Donc argc sera egale a 4

Ton prog verifie la validite des arguments passes au main.
argv[1][0] correspond au premier caractere du premier argument ('-' pour mon exemple)
Il faut que ce caractere soit egale a '-' pour que l'argument soit valide

argv[x][1] correspond au deuxieme caractere 
Il ya 3 possibilitees 'i', 'p' et 'q' pour que l'argument soit valide
Donc voici une ligne de commande qui donnera des arguments valides:
MonExe -iC:\MaVideo.mpg -p50 -q

On aura donc dans ipFilePath la chaine "MaVideo.mpg"
dans search_Packet_Identification l'entier 50 et quit_mode sera egal a 1.

Pour menu, il doit y avoir une fonction dans le reste du code appelle comme cela.
J'espere avoir repondu a tes questions

A+
Mon site internet : [ Lien ]

mercredi 5 mars 2008 à 13:58:15 | Re : Eternel problème...

jfrancois

Réponse acceptée !
0) ip_filepath ne pointe pas la ligne de commande mais un argument de la ligne de commande.

1) On a visiblement une boucle qui est sensée parcourir les arguments de la ligne de commande mais on ne s'occupe que du second paramètre argv[1] !!! et encore si son premier caractère est un tiret (argv[1][0] == '-').

2) argv[1][1] = deuxième caractère (second indice 1) du second argument (premier indice 1).
 argv[0] pointe le premier argument (nom complet du programme),
 argv[1] pointe le second argument,
 argv[2] pointe le troisième argument ...
pour un argument quelconque argv[i] :
argv[i][0] = premier caractère,
argv[i][1] = second caractère ...

3) search_PID = atoi(&argv[1][2]) --> on convertit la chaîne de caractères qui commence au troisième caractère (second indice 2) du second argument (premier indice 1) de la ligne de commande en entier stocké dans la variable search_PID (atoi = ASCII string tointeger). Les 2 caractères qui précèdent sont sensés être un tiret suivi d'une des lettres recherchées.

4) Visiblement menu() affiche un menu et retourne le choix saisi dans la variable menu_choice qui est traitée dans le switch.

Jean-François

mercredi 5 mars 2008 à 14:31:21 | Re : Eternel problème...

jfrancois

Réponse acceptée !
1) Avec le ++argv à la fin de la boucle while() on parcourt bien tous les arguments !!!

Jean-François

mercredi 5 mars 2008 à 14:36:04 | Re : Eternel problème...

dayvid75014

Merci à vous deux, pistol_pete et JFrançois !!!! Un grand merci pour vos explications claires, et concises !


Cette discussion est classée dans : menu, case, ip, break, argv


Répondre à ce message

Sujets en rapport avec ce message

Problème avec un switch en C [ par alexis69 ] Alors voilà. J'ai coder un petit code avec un menu. À la fin de mon switch j'ai ajouté l'option default comme ça si une personne tape autre chose que Violation d'accès mémoire [ par zoneart ] Bonjour,Je suis débutant et j'ai écris deux trois lignes de codes que j'aimerais vous soumettre car une erreur de violation d'accès mémoire survient l menu en c [ par sebz10 ] bonjour, je voudrais créer un menu en c de façon a ce que quand je selectione un proposition (ex: addition) je puisse en suite additions ou tonber dan [jeu 2d] Snake ,petit bug jeu [ par zakuza ] Bonjour à tous , je suis entrain de m'amuser à programmer un petit snake histoire de pratiquer,bon il ne fonctionne pas trop mal mais j'ai quelques bu Récupérer les événements sur une frame dans C++ via JNI [ par PleoX ] Bonjour,(J'espère avoir mis mon sujet dans le bon thème. J'ai pas trouvé de thème plus aproprié.)Je suis en train de créer une application multi-touch DATE MACHINE en C++ [ par eishtein ] bonjour tout la monde; pouvez vous m'aidez à optimiser la classe suivante de telle sorte à ce qu'elle nous donne la date courante: [code=cpp] class d Comport linux : lecture des caracteres [ par kenshin28 ] Bonjour à tous, Je suis actuellement en stage informatique et je dois porter une application qui tourne sur WinXP vers linux. Cette application utili fonction switch et équivalent [ par gromhouleux ] Bonjour, en fait je cherche un équivalent à la fonction switch en C++. Je m'explique,Switch permet de faire une action en fonction d'une valeur entiè GESTION CLAVIER SDL [ par Batman60 ] voici un bout de code qui  sert à me déplacer dans une scène 3D opengl ,le problème c'est qu'il faut à chaque fois appuyer sur la touche pour ce dépla Touches clavier [ par F0ra ] Salut,Mon problème c'est que ça ne fonctionne pas quand j'appuie sur la touche de droite et bas en même temps par exemple.Que faire ?case WM_KEYDOWN:s


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales