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 :

Process returned 255


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut Process returned 255
    Bonsoir à tous.

    Je viens demander votre aide sur un problème sur lequel je suis entrain de m'arracher les cheuveux, j'aimerais savoir si vous comprenez ce qu'il se passe.

    Donc je code actuellement un programme en C dont une partie gère de facon basique des comptes d'utilisateur pour accéder au programme.
    Jusqu'à il y a quelques heures tout fonctionnait bien, mais je viens de changer quelque chose et ca ne marche plus du tout, sauf que je n'arrive pas à trouver d'où vient l'erreur, et pour cause :

    Voici la partie du main qui bug de toute évidence :

    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
    int main()
    {
        int c = 1; // variable "continuer"
        int cc = 1;
        int i = 0;
        int ii = 0;
     
        DATA data;
     
        if (!charger_data(&data))
        return 0;
     
        printf("DEBUG : CHKPT");
     
    (...)
     
    return 0;
    Or, mon programme plante avant d'afficher CHKPT

    MAIS voici maintenant ma fonction charger_data :
    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
    int charger_data(DATA *data)
    {
        printf("DEBUG : charger_dataD");
        if(!charger_fichier_carte(&(data->carte)))
        {
            effacer_fichier_carte(); // Si le fichier carte.txt manque on le crée, puis on relance charger_fichier_carte
            if(!charger_fichier_carte(&(data->carte)))
            {
                printf("ERREUR CRITIQUE : impossible de creer le fichier carte.txt. Arret du programme.\n");
                return 0;
            }
        }
     
        if(!charger_fichier_utilisateurs(&(data->utilisateurs)))
        {
            effacer_fichier_utilisateurs(); // Si le fichier utilisateurs.txt manque on le crée, puis on relance charger_fichier_carte
            if(!charger_fichier_utilisateurs(&(data->utilisateurs)))
            {
                printf("ERREUR CRITIQUE : impossible de creer le fichier utilisateurs.txt. Arret du programme.\n");
                return 0;
            }
        }
     
        printf("DEBUG : charger_dataF");
     
        return 1;
    }
    Or lorsque je lance l'exécutable, il se passe exactement la chose suivante :

    - DEBUG : charger_dataD est correctement affiché
    - DEBUG : charger_dataF est correctement affiché

    le programme cesse de fonctionner et windows l'arette
    - le programme affiche : Process returned 255 (0xFF)

    - DEBUG : CHKPT n'est pas affiché !

    Pourtant, printf("DEBUG : CHKPT") est l'instruction qui suit directement charger_data(&data)...

    Bref, je ne comprends pas du tout comment ce genre de chose est possible et de fait il m'est impossible de trouver l'erreur de mon programme, depuis la dernière compilation fructueuse j'ai changé le mode de gestion des utilisateurs donc je pense que c'est là dedans qu'il y a erreur, mais alors pourquoi DEBUG : charger_dataF s'affiche-t-il correctement ?

    Si quelqu'un y comprend quelque chose je lui serai très reconnaissant de m'expliquer ce qu'il peut bien se passer

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Salut,

    A priori, je ne vois aucune erreur dans le code que tu nous montres. L'erreur est certainement ailleurs. Qu'en est-il des fonctions charger_fichier_carte() et charger_fichier_utilisateurs()? Aurais-tu un code compilable minimal qui reproduit l'erreur que tu décris?

    Avec mes meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut code minimal
    Bonjour Thierry

    Je viens de créer un code minimal qui reproduit cette erreur, par contre comme le programme commence à être assez complexe j'ai du laisser quelques définitions de structures et fonctions :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    #include <stdio.h>
    #include <stdlib.h>
     
    #define TAILLE_LOGIN 20 // nombre de caractères max pour les identifiants d'un utilisateur
    #define NOMBRE_UTILISATEURS 10 // nombres max d'utilisateurs enregistrés dans le fichier utilisateurs.txt
     
    typedef struct utilisateur
    {
        char nom[TAILLE_LOGIN];
        char mdp[TAILLE_LOGIN];
    }UTILISATEUR;
     
    void effacer_utilisateur(UTILISATEUR *utilisateur); // (ré)initialise un utilisateur aux valeurs nulles
    void effacer_tableau_utilisateurs(UTILISATEUR utilisateurs[NOMBRE_UTILISATEURS]); // efface tous les utilisateurs d'un tableau et initialise un compte admin sur la première case
    //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    typedef struct utilisateurs
    {
        UTILISATEUR t_utilisateurs[NOMBRE_UTILISATEURS];
        int n_utilisateurs;
    }UTILISATEURS;
    void effacer_utilisateurs(UTILISATEURS *utilisateurs); // supprimme tous les comptes utilisateurs et réinitialise le compte admin
    //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    typedef struct data // les structures DATA contiennent tout ce qui est chargé dans le main et passé en paramètre au menu.
    {
        UTILISATEURS utilisateurs;
    }DATA;
     
    // UTILISATEUR :
    void effacer_utilisateur(UTILISATEUR *utilisateur)
    {
        utilisateur->nom[0] = '\0';
        utilisateur->mdp[0] = '\0';
    }
     
    void effacer_tableau_utilisateurs(UTILISATEUR utilisateurs[NOMBRE_UTILISATEURS])
    {
        int i = 1;
        int j = 0;
     
        for(j=0; j < TAILLE_LOGIN - 1 && j < 5; j++)
        {
            switch(j)
            {
                case 0:
                utilisateurs[0].nom[j] = 'A';
                utilisateurs[0].mdp[j] = 'A';
                break;
     
                case 1:
                utilisateurs[0].nom[j] = 'D';
                utilisateurs[0].mdp[j] = 'D';
                break;
     
                case 2:
                utilisateurs[0].nom[j] = 'M';
                utilisateurs[0].mdp[j] = 'M';
                break;
     
                case 3:
                utilisateurs[0].nom[j] = 'I';
                utilisateurs[0].mdp[j] = 'I';
                break;
     
                case 4:
                utilisateurs[0].nom[j] = 'N';
                utilisateurs[0].mdp[j] = 'N';
                break;
            }
        }
     
        utilisateurs[0].nom[j] = '\0';
        utilisateurs[0].mdp[j] = '\0';
     
        for(i=1; i < NOMBRE_UTILISATEURS; i++)
        {
            effacer_utilisateur(utilisateurs + i);
        }
    }
    //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    // UTILISATEURS :
    void effacer_utilisateurs(UTILISATEURS *utilisateurs)
    {
        effacer_tableau_utilisateurs(utilisateurs->t_utilisateurs);
        utilisateurs->n_utilisateurs = 1;
    }
    //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    int effacer_fichier_utilisateurs()
    {
        UTILISATEURS utilisateurs;
        FILE *fic = fopen("utilisateurs.txt", "wb");
     
        effacer_utilisateurs(&utilisateurs);
     
        if(fic == NULL)
        {
            printf("ERREUR CRITIQUE : IMPOSSIBLE DE CREER utilisateurs.txt\n");
            fclose(fic);
            return 0;
        }
        else
        {
            fseek(fic, 0, SEEK_SET);
            fwrite(&utilisateurs, sizeof(UTILISATEURS), 1, fic);
        }
     
     
        fclose(fic);
     
        return 1;
    }
     
    int charger_fichier_utilisateurs(UTILISATEURS *utilisateurs)
    {
        FILE *fic = fopen("utilisateurs.txt", "r+b");
     
        if(fic == NULL)
        {
            printf("ERREUR : FICHIER utilisateurs.txt MANQUANT, LANCEZ LA FONCTION effacer_utilisateurs\n");
            fclose(fic);
            return 0;
        }
        else
        {
            fseek(fic, 0, SEEK_SET);
            fread(&utilisateurs, sizeof(UTILISATEURS), 1, fic);
     
            fclose(fic);
     
            return 1;
        }
    }
     
     
     
    int charger_data(DATA *data)
    {
        printf("DEBUG : charger_dataD");
     
        if(!charger_fichier_utilisateurs(&(data->utilisateurs)))
        {
            effacer_fichier_utilisateurs(); // Si le fichier utilisateurs.txt manque on le crée, puis on relance charger_fichier_carte
            if(!charger_fichier_utilisateurs(&(data->utilisateurs)))
            {
                printf("ERREUR CRITIQUE : impossible de creer le fichier utilisateurs.txt. Arret du programme.\n");
                return 0;
            }
        }
     
        printf("DEBUG : charger_dataF");
     
        return 1;
    }
     
     
     
     
     
     
     
    int main()
    {
        DATA data;
     
        if (!charger_data(&data))
        return 0;
     
        printf("DEBUG : CHKPT");
     
        return 0;
    }
    Voila, auparavant (quand ca fonctionnait) je n'utilisais pas de structures UTILISATEURS, à la place j'avais un tableau d'UTILISATEUR qui est maintenant arrivé dans la structure UTILISATEURS qui contient le nombre d'UTILISATEUR entrés dans le tableau et qui contiendra plus tard d'autres informations.

    Si tu peux regarder je te remercie pour ton temps, je ne comprends toujours pas comment la console affiche le 2ème DEBUG et pas le 3ème.

    Cordialement.

    PS : si tu compiles la première fois le programme t'affichera une erreur parce que tu n'as pas le fichier "utilisateur.txt", il le créera automatiquement avant le planter.

  4. #4
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Chez moi, ce code compile et affiche les trois messages de DEBUG:

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define TAILLE_LOGIN 20 // nombre de caractères max pour les identifiants d'un utilisateur
    #define NOMBRE_UTILISATEURS 10 // nombres max d'utilisateurs enregistrés dans le fichier utilisateurs.txt
     
    /* -tc- ATTENTION: le nombre de caracteres max pour les identifiants d'un
       utilisateur est (TAILLE_LOGIN - 1) */
    typedef struct utilisateur
    {
        char nom[TAILLE_LOGIN];
        char mdp[TAILLE_LOGIN];
    } UTILISATEUR;
     
    void effacer_utilisateur(UTILISATEUR *utilisateur); // (ré)initialise un utilisateur aux valeurs nulles
     
    /* -tc- Indiquer la taille du tableau dans le paramètre utilisateurs ne sert a
       rien d'autre qu'a documenter le code. Tu ne pourras en aucun cas
       t'appuyer dessus cette information a l'interieur de la fonction */
    void effacer_tableau_utilisateurs(UTILISATEUR utilisateurs[NOMBRE_UTILISATEURS]); // efface tous les utilisateurs d'un tableau et initialise un compte admin sur la première case
    //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    typedef struct utilisateurs
    {
        UTILISATEUR t_utilisateurs[NOMBRE_UTILISATEURS];
        int n_utilisateurs;
    } UTILISATEURS;
    void effacer_utilisateurs(UTILISATEURS *utilisateurs); // supprimme tous les comptes utilisateurs et réinitialise le compte admin
    //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    typedef struct data // les structures DATA contiennent tout ce qui est chargé dans le main et passé en paramètre au menu.
    {
        UTILISATEURS utilisateurs;
    } DATA;
     
    // UTILISATEUR :
    void effacer_utilisateur(UTILISATEUR *utilisateur)
    {
        utilisateur->nom[0] = '\0';
        utilisateur->mdp[0] = '\0';
    }
     
    void effacer_tableau_utilisateurs(UTILISATEUR utilisateurs[NOMBRE_UTILISATEURS])
    {
        int i = 1;
     
        /* -tc- Pourquoi utiliser un switch-case pour ecrire "ADMIN dans les champs
           nom et mdp de l'utilisateur n°0 ? */
        utilisateurs[0].nom[0] = '\0';
        strncat(utilisateurs[0].nom, "ADMIN", TAILLE_LOGIN - 1);
        utilisateurs[0].mdp[0] = '\0';
        strncat(utilisateurs[0].mdp, "ADMIN", TAILLE_LOGIN - 1);
     
        for(i = 1; i < NOMBRE_UTILISATEURS; i++)
        {
            effacer_utilisateur(utilisateurs + i);
        }
    }
    //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    // UTILISATEURS :
    void effacer_utilisateurs(UTILISATEURS *utilisateurs)
    {
        effacer_tableau_utilisateurs(utilisateurs->t_utilisateurs);
        utilisateurs->n_utilisateurs = 1;
    }
    //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    int effacer_fichier_utilisateurs(void)
    {
        UTILISATEURS utilisateurs;
        FILE *fic = fopen("utilisateurs.txt", "wb");
     
        effacer_utilisateurs(&utilisateurs);
     
        if(fic == NULL)
        {
            printf("ERREUR CRITIQUE : IMPOSSIBLE DE CREER utilisateurs.txt\n");
            /* -tc- ATTENTION: passer la valeur NULL a fclose() est un comportement
               indetermine. Si l'ouverture du fichier a echoue, inutile de vouloir
               le fermer explicitement.
            fclose(fic);
            */
     
            /* -tc- personnellement, je fais comme main(), je retourne 0 lorsque
               tout va bien */
            return 0;
        }
        else
        {
            /* -tc pas terrible d'ecrire et de lire un structure telle quelle avec
               fwrite/fread, mais bon... */
     
            /* -tc- a quoi ca sert de te positionner explicitement au debut du
               fichier? A moins d'ouvrir le fichier en mode "a", c'est le cas par
               defaut.
               */
            fseek(fic, 0, SEEK_SET);
            /* -tc- ATTENTION: la variable utilisateurs n'est accessible que depuis
               la fonction effacer_fichier_utilisateurs(). Je ne comprends
               d'ailleurs pas trop ce qu'elle fait, car elle sauve dans le fichier
               une structure de donnees qui n'est pas initialisee (contenu aleatoire).
               Il serait a mon sens preferable d'initialiser utilisateurs a une
               valeur vide, mais connue et testable.
               */
            fwrite(&utilisateurs, sizeof(UTILISATEURS), 1, fic);
        }
     
     
        fclose(fic), fic = NULL;
     
        return 1;
    }
     
    int charger_fichier_utilisateurs(UTILISATEURS *utilisateurs)
    {
        FILE *fic = fopen("utilisateurs.txt", "r+b");
     
        if(fic == NULL)
        {
            printf("ERREUR : FICHIER utilisateurs.txt MANQUANT, LANCEZ LA FONCTION effacer_utilisateurs\n");
            /* -tc- ATTENTION: passer la valeur NULL a fclose() est un comportement
               indetermine. Si l'ouverture du fichier a echoue, inutile de vouloir
               le fermer explicitement.
            fclose(fic);
            */
            return 0;
        }
        else
        {
            /* -tc- inutile */
            fseek(fic, 0, SEEK_SET);
            /* -tc- utilisateurs est deja un pointeur sur une structure de type
               UTILSATEURS. Pas besoin de l'operateur d'adressage ici.
               */
            fread(utilisateurs, sizeof(UTILISATEURS), 1, fic);
     
            fclose(fic), fic = NULL;
     
            return 1;
        }
    }
     
     
    int charger_data(DATA *data)
    {
        printf("DEBUG : charger_dataD");
     
        /* -tc- charger_fichier_utilisateurs() retourne 0 en cas d'echec */
        if(0 == charger_fichier_utilisateurs(&(data->utilisateurs)))
        {
            effacer_fichier_utilisateurs(); // Si le fichier utilisateurs.txt manque on le crée, puis on relance charger_fichier_carte
            if(0 == charger_fichier_utilisateurs(&(data->utilisateurs)))
            {
                printf("ERREUR CRITIQUE : impossible de creer le fichier utilisateurs.txt. Arret du programme.\n");
                return 0;
            }
        }
     
        printf("DEBUG : charger_dataF");
     
        return 1;
    }
     
     
    int main(void)
    {
        DATA data;
     
        if (0 == charger_data(&data))
        {
            return EXIT_FAILURE;
        }
     
        printf("DEBUG : CHKPT");
     
        return 0;
    }
    Il y a des choses tres bizarres dans ton code, comme par exemple ta manière de remplir utilisateurs[0].nom et utilisateurs[0].mdp avec la chaîne de caractères "ADMIN". Fait également attention à fwrite/fread. Utiliser ces fonctions comme tu le fais ici n'est pas recommandable. Pour un projet d'études, cela fait peut-être sens, encore que...

    Sinon, dans ta fonction charger_fichier_utilisateurs(), tu avais un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fread(&utilisateurs, sizeof(UTILISATEURS), 1, fic);
    au lieu de (utilisateurs est en effet déjà un pointeur sur une structure de type UTILSATEURS)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fread(utilisateurs, sizeof(UTILISATEURS), 1, fic);
    Avec mes meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Ok j'ai trouvé la connerie, dans ma fonction charger j'ai fais passer une adresse de pointeur à fread, pas étonnant qu'il râle

    J'ai toujours pas compris pourquoi mon programme plantait à retardement mais au moins je suis sorti d'affaire

    EDIT : Ah ben Thierry j'avais pas vu ta réponse, merci de ton aide alors

    Oui c'est un projet d'étude en effet, on nous a demandé d'utiliser les fonctions fread fwrite etc donc je suis pas contrariant.
    Et pour "ADMIN" c'est bizarre mais sur le coup c'est la facon la plus directe qui m'est venue à l'esprit pour que le programme ne plante pas si le correcteur a de l'humour et s'amuse a définir TAILLE_LOGIN 3, voila voila...
    Enfin du coup je vais plutôt suivre tes conseils sinon on va me reprocher de faire des trucs louches pour remplacer des fonctions de la bibliothèque standard, ils aiment pas trop ca non plus les correcteurs...

    Je ne savais pas qu'il ne fallait pas envoyer NULL a fclose merci pour la correction !
    Bonne soirée !

  6. #6
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    • Ce n'est pas le fait d'utiliser fwrite()/fread() que je conteste, mais la manière de l'utiliser.
    • Si le correcteur a de l'humour et donne à TAILLE_LOGIN la valeur de 3, utilise strncat() comme proposé et tu es tranquille (à ceci prêt que je défies le correcteur en question d'écrire la chaîne "ADMIN" dans un tableau de 3 caractères)


    Avec mes meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

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

Discussions similaires

  1. [Hudson] BUILD FAILED exec returned: 255
    Par stephdemars dans le forum Intégration Continue
    Réponses: 2
    Dernier message: 17/02/2012, 16h32
  2. Réponses: 3
    Dernier message: 16/11/2010, 11h16
  3. "Process returned 3" (kézako?!?)
    Par Nival dans le forum Débuter
    Réponses: 6
    Dernier message: 15/03/2009, 01h48
  4. [DOM] Ajout d'une instrution de processing
    Par corwin_d_ambre dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 06/05/2003, 11h51
  5. [Application] Chaine de + de 255 caractéres
    Par Righetto Dominique dans le forum Langage
    Réponses: 6
    Dernier message: 26/03/2003, 22h49

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