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 :

sprintf et excevp


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Par défaut sprintf et excevp
    Bonjour,
    je voudrais faire un recouvrement d'un fichier en lui passant un tableau d'entier. Le problème est qu'avec execvp il faut passer un tableau de chaînes de caractères. J'ai donc essayer de convertir le tableau en tableau de chaines de caractère avec sprintf mais j'ai toujours la même erreur : erreur de segmentation core default. Voici mon 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
    char* param_admin[nb_employe];
    char param_temp[20];
    //mise en place des paramètres nécessaires au recouvrement
    strcpy(param_admin[0],"administrateur.exe");
    strcpy(param_admin[nb_employe-1],NULL);
     
    for (i=0;i<nb_employe-2;i++)
    {
    sprintf(param_temp, "%d" , tabpid[i]);
    strcpy(param_admin[i+1],param_temp);
    printf("affichage valeur param_admin %d %d %d %d \n",atoi(param_admin[0]),atoi(param_admin[1]),atoi(param_admin[2]),atoi(param_admin[3 ]));
    }
    ...
    execvp("administrateur.exe",param_admin);
    J'ai donc essayer de le modifier moulte fois mais je ne trouve toujours pas. J'ai par contre trouver ce petit bout de code qui fonctionne mais e tableau obtenu ne peut pas être envoyer dans execvp il refuse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int tabpid[3]={2,4,7};
    int i;
    char param_admin[4][20];
     
    //mise en place des paramètres nécessaires au recouvrement
    strcpy(param_admin[0],"rien");
     
     
    for (i=0;i<3;i++)
    {
    sprintf(param_admin[i+1], "%d" , tabpid[i]);
     
    printf("affichage valeur param_admin %s ",param_admin[i+1]);
    }
    .

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char* param_admin[nb_employe];
    char param_temp[20];
    //mise en place des paramètres nécessaires au recouvrement
    strcpy(param_admin[0],"administrateur.exe");
    strcpy cherche à copier la chaîne à l'adresse spécifiée dans param_admin[0] . Or cette adresse n'a pas été initialisée. Il faut pour pouvoir copier la chaîne que param_admin[0] contienne l'adresse d'un tableau de char suffisamment grand pour contenir la chaîne (avec son 0 terminal)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Par défaut
    strcpy fonctionne correctement ( ce qui est bizarre d'après ce que tu dis), le problème vient de sprintf.

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par zazou0506 Voir le message
    strcpy fonctionne correctement ( ce qui est bizarre d'après ce que tu dis), le problème vient de sprintf.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    char* param_admin[nb_employe];
    char param_temp[20];
    ... 
    for (i=0;i<nb_employe-2;i++)
    {
    sprintf(param_temp, "%d" , tabpid[i]);
    strcpy(param_admin[i+1],param_temp)
    ...
    Le sprintf est à priori correct, mais le strcpy qui le suit ne l'est pas pour la raison indiquée précédemment

    De toute façon, à copier des chaînes n'importe où, le résultat obtenu est imprévisible et des comportements bizarres peuvent se manifester bien après l'erreur elle-même.

  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 zazou0506 Voir le message
    strcpy fonctionne correctement ( ce qui est bizarre d'après ce que tu dis), le problème vient de sprintf.
    Non. Pourquoi tu insistes comme ça ? On te dit que le comportement est indéterminé (utilisation d'un pointeur non initialisé).

    Commence par corriger ça, après, on verra le reste.

Discussions similaires

  1. Connaitre la taille du résultat de sprintf
    Par gege2061 dans le forum C
    Réponses: 6
    Dernier message: 09/01/2006, 14h56
  2. [Débutant(e)] equivalence de sprintf en JAVA
    Par GuillaumeCorbineau dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 06/09/2005, 19h18
  3. [débutant] equivalent à sprintf pour les std::string
    Par Biosox dans le forum SL & STL
    Réponses: 22
    Dernier message: 26/08/2005, 12h46
  4. pb sprintf
    Par peuf23 dans le forum Langage
    Réponses: 4
    Dernier message: 02/08/2005, 17h46
  5. sprintf : le point devient virgule ?!
    Par jula dans le forum C++
    Réponses: 4
    Dernier message: 17/09/2004, 12h50

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