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 :

Problème de pointeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Par défaut Problème de pointeur
    Alors je vous explique mon problème :

    - Tout d'abord mon but, c'est de couper une chaine de caractère pour en récupérer 3 parties... ma chaine est du style :

    UNIT DSNAME =SYSDA
    VOLUME1 =ETD000
    TYPE ALLOC =TRK
    Je veux récupérer donc la partie avant le " = " et la partie après, et le égal... J'ai tenté quelquechose avec le code suivant, mais j'ai une erreur que je ne parviens pas à résoudre...

    L'erreur en PJ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	/*Analyse de la ligne*/
    	sep = strchr(ligne, '=');
    	motcle = strncpy(T_cartes[i].Mot_cle, ligne, sep - ligne);
    	val = strcpy(T_cartes[i].Valeur, sep +1);

    Merci d'avance pour votre aide
    Images attachées Images attachées  

  2. #2
    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
    Peux-ton voir les déclaration de sep, ligne, motcle, T_cartes, la structure référencée par T_cartes, et val?
    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.

  3. #3
    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 : 48
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Regarde du côté de strtok(). Peut-être pourrais-tu poster un morceau de code compilable et minimal qui reproduit les problèmes que tu rencontres?

    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++

    +

  4. #4
    Membre éclairé Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Par défaut
    Voici les déclarations des variables :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char * motcle;
    char * val;
    char * ligne;
    char * sep;
    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
    struct  Carte
    {
    	char Mot_cle [12];
    	char gere;
    	char Valeur [17];
    };
     
    struct Carte T_cartes[14]={{"Unit Dsname" , 'N', " "},
    						   {"Type Alloc"  , 'N', " "},
    						   {"Disq Primair", 'N', " "},
    						   {"Disq Second" , 'N', " "},
    						   {"Lrecl"       , 'N', " "},
    						   {"DCB Blksize" , 'N', " "},
    						   {"Bufno"       , 'N', " "},
    						   {"Prefix"      , 'N', " "},
    						   {"Nom Procmef" , 'N', " "},
    						   {"Nom Procran" , 'N', " "},
    						   {"Volume1"     , 'N', " "},
    						   {"Volume2"     , 'N', " "},
    						   {"Volume3"     , 'N', " "},
    						   {"Timestamp"   , 'N', " "}};
    je n'ai pas de code compilable ni d'ailleur aucun moyen de vérifier ou de teste ce que je fais malheureusement... Du moins pas pour l'instant...

  5. #5
    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
    Dans ce cas, je ne vois pas trop ce qui peut causer ces warnings.
    On dirait que le code ne voit pas les déclarations de variables...
    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.

  6. #6
    Membre éclairé Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Par défaut
    Je vais vous poster tous le code, peut être que ça sera plus simple pour vous...

    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
     
    struct  Carte
    {
    	char Mot_cle [12];
    	char gere;
    	char Valeur [17];
    };
     
    struct Carte T_cartes[14]={{"Unit Dsname" , 'N', " "},
    						   {"Type Alloc"  , 'N', " "},
    						   {"Disq Primair", 'N', " "},
    						   {"Disq Second" , 'N', " "},
    						   {"Lrecl"       , 'N', " "},
    						   {"DCB Blksize" , 'N', " "},
    						   {"Bufno"       , 'N', " "},
    						   {"Prefix"      , 'N', " "},
    						   {"Nom Procmef" , 'N', " "},
    						   {"Nom Procran" , 'N', " "},
    						   {"Volume1"     , 'N', " "},
    						   {"Volume2"     , 'N', " "},
    						   {"Volume3"     , 'N', " "},
    						   {"Timestamp"   , 'N', " "}};
     
    int rc;
    int lrc;
    int NewDeb;
     
    char * motcle;
    char * val;
    char * ligne;
    char * sep;
     
    ZoneErreur *pZErr;
     
    /*------------------------------------------------------------------*/
    /* Ouverture du fichier parametre                                   */
    /*------------------------------------------------------------------*/
     
    int P201_Lecture_parametres_allocation_01(T_cartes){
     
    	errno = 0;
    	FILE *fp = fopen(getenv("dd_F2CAAL"), "r");
    	P202_Init_cartes_alloc_02(T_cartes);
    	if (fp == NULL){
    		strcpy(pZErr->Code, "GEN011");
    		FormatMsg(pZErr->Code, pZErr->Libelle,F2CAAL, "fopen",errno);
    		rc = 1;
    		/* fichier inexistant */
    	}
    	else
    	{
    		int i = 0;
    		do{
    			fegts(ligne, '80', fp);
    			P203_Controle_carte_alloc_02 (ligne, T_cartes, i);
    			i++;
     
    		}while (ligne != EOF); //&& (resu != FALSE));
    	}
    	   /* fichier existant */
    //	   goto FERMEFIC;
    	}
     
     
     
     
    int P202_Controle_carte_alloc_02 (ligne, T_cartes, i){
    	/*Analyse de la ligne*/
    	sep = strchr(ligne, '=');
    	motcle = strncpy(T_cartes[i].Mot_cle, ligne, sep - ligne);
    	val = strcpy(T_cartes[i].Valeur, sep +1);
    	/*Test de la ligne et des differentes valeurs*/
    	if (motcle == "UNIT DSNAME"){
    		strncpy(T_cartes[0].Valeur, val + 1, 6);
    		T_cartes[0].gere   = 'Y';
    	}else if (motcle == "TYPE ALLOC"){
    		if(!strcmp(val,"TRK")||(!strcmp(val,"CYL"){
    			strncpy(T_cartes[1].Valeur, val + 1, 3);
    			val[4] = 0;
    		}else if (strtol(val, NULL, 10)){
    			strncpy(T_cartes[1].Valeur, val + 1, 5);
    		}
    		T_cartes[1].gere   = 'Y';
    	}else if (motcle == "DISC PRIMAIR"){
    		if (strtol(val, NULL, 10)){
    			strncpy(T_cartes[2].Valeur, val + 1, 8);
    		}
    		T_cartes[2].gere   = 'Y';
    	}else if (motcle == "DISC SECOND"){
    		if (strtol(val, NULL, 10)){
    			strncpy(T_cartes[3].Valeur, val + 1, 8);
    		}
    		T_cartes[3].gere   = 'Y';
    	}else if (motcle == "LRECL"){
    		if ((strtol(val, NULL, 10)) && ((strtol(val, NULL, 10)>=925)&& ((strtol(val, NULL, 10)<=32460){
    			strncpy(T_cartes[4].Valeur, val + 1, 5);
    		}
    		T_cartes[4].gere   = 'Y';
    	}else if (motcle == "DCB BLKSIZE"){
    		if ((strtol(val, NULL, 10)) && ((strtol(val, NULL, 10)>0){
    			strncpy(T_cartes[5].Valeur, val + 1, 5);
    		}
    		T_cartes[5].gere   = 'Y';
    	}else if (motcle == "BUFNO"){
    		if ((strtol(val, NULL, 10)) && ((strtol(val, NULL, 10)>0){
    			strncpy(T_cartes[6].Valeur, val + 1, 3);
    		}
    		T_cartes[6].gere   = 'Y';
    	}else if (motcle == "PREFIX"){
    		// Création de la fonction Determiner_longueur_utile_03(Alloc_valeur(1:27),27)
    	}else if (motcle == "NOM PROCMEF"){
    		strncpy(T_cartes[8].Valeur, val + 1, 8);
    		T_cartes[8].gere   = 'Y';
    	}else if (motcle == "NOM PROCRAN"){
    		strncpy(T_cartes[9].Valeur, val + 1, 8);
    		T_cartes[9].gere   = 'Y';
    	}else if (motcle == "VOLUME1"){
    		strncpy(T_cartes[10].Valeur, val + 1, 8);
    		T_cartes[10].gere   = 'Y';
    	}else if (motcle == "VOLUME2"){
    		strncpy(T_cartes[11].Valeur, val + 1, 8);
    		T_cartes[11].gere   = 'Y';
    	}else if (motcle == "VOLUME3"){
    		strncpy(T_cartes[12].Valeur, val + 1, 8);
    		T_cartes[12].gere   = 'Y';
    	}else (motcle == "TIMESTAMP"){
    		if((val == 'O') || (val == 'N'){
    			strncpy(T_cartes[13].Valeur, val + 1, 1);
    		}
    		T_cartes[13].gere   = 'Y';
    	}
    }

  7. #7
    Membre confirmé Avatar de Topeur
    Profil pro
    Inscrit en
    Février 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 91
    Par défaut
    Citation Envoyé par Spinoza23 Voir le message
    Alors je vous explique mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	/*Analyse de la ligne*/
    	sep = strchr(ligne, '=');
    	motcle = strncpy(T_cartes[i].Mot_cle, ligne, sep - ligne);
    	val = strcpy(T_cartes[i].Valeur, sep +1);
    Bonjour,

    Je pense qu'il faut que tu rajoute le caractère fin de chaine lors de ton strcpy et strncpy. Il faut (je crois ) rajouter manuellement le caractère '\0'
    Et sinon, verifie la valeur de ton calcul sep-ligne, car il me semble que sep est la position d'un pointeur (5 sur 10 cases par exemple) et ligne est l'adresse de ton debut de tableau (841235 par exemple).
    J'avais deja eu un souci avec ca

    Bon courage !

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

Discussions similaires

  1. Problème de pointeurs..embrouillé
    Par Frenchy dans le forum C++
    Réponses: 11
    Dernier message: 10/03/2005, 16h33
  2. Problème de pointeur avec un TQuery
    Par Oluha dans le forum Bases de données
    Réponses: 3
    Dernier message: 25/01/2005, 13h57
  3. Problème de pointeur
    Par toma_lille dans le forum C++
    Réponses: 1
    Dernier message: 07/12/2004, 21h26
  4. [MFC] Problème de pointeur !!
    Par acastor dans le forum MFC
    Réponses: 7
    Dernier message: 19/03/2004, 15h50
  5. TBitmap et problèmes de pointeurs...
    Par benj63 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/07/2003, 13h39

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