IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

probleme avec la fonction genninterrupt()


Sujet :

C

  1. #1
    Membre éclairé Avatar de amadoulamine1
    Inscrit en
    Avril 2005
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 260
    Par défaut probleme avec la fonction genninterrupt()
    Bonjour à tous j'ai un petit probleme avec les interruptions Ici je dois creer un dossier en utilisant l'interruption 21H et en mettant dans AX l'instruction 39H mais le dossier ne se crée pas
    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    #include <conio.h>
    #include <stdio.h>
    #include <dos.h>
    /////////////////////////////////////////////////////
    void main()
    {
      char *nom;
     
     printf("nom du repertoire");
     gets(nom);
     _AX=0x39;
     _DX=FP_OFF(nom);
     _DS=FP_SEG(nom);
     
     geninterrupt(0x21);
     
       if(_FLAGS==0)
          printf("dossier crée avec succes"); 
        else if(_FLAGS==1)
           { 
                if(_AX==3)
                    printf("chemin non trouvé");
                else if(_AX==5)
                    printf("Acces refuse");
           }
      getch();
    }

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Je connais pas dos.h

    Mais je vois une erreur, nom n'est pas alloué, tu n'a pas de place pour mettre quelque chose dedans.

    char nom[100];

    gets caymal (très très)

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par amadoulamine1
    Bonjour à tous j'ai un petit probleme avec les interruptions Ici je dois creer un dossier en utilisant l'interruption 21H et en mettant dans AX l'instruction 39H mais le dossier ne se crée pas
    Tu ne peux pas utiliser mkdir() ? Ce sera un peu moins gore...

  4. #4
    Membre éclairé Avatar de amadoulamine1
    Inscrit en
    Avril 2005
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 260
    Par défaut
    en fait nom est allouée par gets() et non je ne peut pas utiliser mkdir() parcequ'on nous a interdit d'utiliser les fonctions standart du c et du dos quedes interruptions

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par amadoulamine1
    en fait nom est allouée par gets()
    Absolument pas. Tu dois fournir l'adresse d'un tableau de char correctement dimensionné et modifiable.

    De plus, il est fortement déconseillé d'utiliser gets()

    http://emmanuel-delahaye.developpez.com/inputs.htm

    Je te trouve un peu gonflé de venir contester une réponse donnée (et correcte) alors que ton code invoque un comportement indéfini et que la réponse corrige ce problème.

    Si tu penses qu'on raconte n'importe quoi, va jouer ailleurs, on a pas de temps à perdre avec des bricoleurs.

  6. #6
    Membre éclairé Avatar de amadoulamine1
    Inscrit en
    Avril 2005
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 260
    Par défaut
    En fait pourquoi je le dit ,j'ai utilisé la meme fonction mais avec int86x() et int86() et ca a marché avec les memes choses mais je ne comprend pourquoi cela ne marche pas avec geninterrupt();
    Pour le gets t'inquiete pas car j'ai essaye avec
    [code]
    _DX=FP_OFF("nom");
    _DS=FP_SEG("nom");
    [\code]
    et cela n'a pas marché il faut aussi savoir que scanf("%s",...) et gets(...) font la meme chose du moment ou on alloue pas vec scanf pourquoi allouer avec gets puisqu'on ne connait meme pas encore le nombre de char à y mettre

  7. #7
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par amadoulamine1
    et cela n'a pas marché il faut aussi savoir que scanf("%s",...) et gets(...) font la meme chose du moment ou on alloue pas vec scanf pourquoi allouer avec gets puisqu'on ne connait meme pas encore le nombre de char à y mettre
    Qu'est-ce que tu racontes ?

    scanf (tout comme gets) a besoin de l'adresse du premier élément d'un tableau de char de taille suffisante. Si y'a pas de place, ca marche pas.

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut [Turbo C]
    Citation Envoyé par amadoulamine1
    En fait pourquoi je le dit ,j'ai utilisé la meme fonction mais avec int86x() et int86() et ca a marché avec les memes choses mais je ne comprend pourquoi cela ne marche pas avec geninterrupt();
    je ne connais pas geninterrupt() (quel compilateur ?). Pourquoi tu ne continues pas avec int86() et ses structures REGS ? Je pense que c'est beaucoup plus fiable que de passer par les 'pseudoregistres' _XX.
    Pour le gets t'inquiete pas car j'ai essaye avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    _DX=FP_OFF("nom");
     _DS=FP_SEG("nom");
    et cela n'a pas marché il faut aussi savoir que scanf("%s",...) et gets(...) font la meme chose du moment ou on alloue pas vec scanf pourquoi allouer avec gets puisqu'on ne connait meme pas encore le nombre de char à y mettre
    Dans les deux cas, il faut fournir une adresse correcte. Mais il vaut encore mieux apprendre à utiliser fgets()...

    En tout cas, j'ai rarement vu un ignorant muni d'une telle arrogance... Tu devrais penser à te remettre en cause plus souvent, parce que si tu continues à passer des variables indéfinies ou des pointeurs invalides à des fonctions, tu va avoir de drôles de surprises... Tu ferais bien de relire ton livre de C...

    Tu es prévenu et il ne faudra pas venir pleurer le jour où ça te pètera à la tronche...

    http://emmanuel-delahaye.developpez.com/notes.htm#ub

  9. #9
    Membre éclairé Avatar de amadoulamine1
    Inscrit en
    Avril 2005
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 260
    Par défaut
    Merci j'ai utilise avec int86() et int86x() et ca marche et pourtant geninterrupt() est une fonction de c j'aurai aime comprendre pourquoi ca ne marche pas mais bon puisque avec int86() ca marche je vai continuer avec

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je ne sais pas ce que tu appelles "une fonction de c", mais je peux t'assurer qu'une telle fonction ne fait pas partie du standard C, ni du standard POSIX.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    geninterrupt est une macro définie dans <dos.h> qui était utilisée en Turbo C

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define geninterrupt(i) __int__(i)      /* Interrupt instruction */

  12. #12
    Membre éclairé Avatar de amadoulamine1
    Inscrit en
    Avril 2005
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 260
    Par défaut
    oui c'est ca c'est definie dans le "dos.h"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec la fonction Ontimer
    Par Djule dans le forum MFC
    Réponses: 8
    Dernier message: 27/11/2005, 17h52
  2. Probleme avec la fonction rename()
    Par TheZenZen dans le forum C
    Réponses: 6
    Dernier message: 08/10/2005, 15h59
  3. [LG] Problème avec la Fonction ReadLn en fin de programme
    Par killermano dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2005, 15h16
  4. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo