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 :

Initialisation de tableaux


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Initialisation de tableaux
    Bonsoir,

    Lorsque je fais tourner le bout de code ci-dessous, j'ai quelques problèmes avec des caractères non désirés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    char *commande2 = new char[200];
    	strcat (commande2, "cp ");
    	strcat (commande2, nomfichier_me_temp.data());
    	strcat (commande2, " ");
    	strcat (commande2, nomfichier_me.data());
    	cout << "\nCOMMANDE 2" << endl;
    	cout << commande2 << endl;
    	etat = system(commande2);
    	delete [] commande2;
    et j'obtiens :

    üÀ#@üÀ#@cp /home/essai-tmp /home/essai

    J'ai essayé de remplir le tableau de caractères blancs et ca fonctionne mais n'existe-t-il pas une solution plus élégante?

    Merci d'avance

  2. #2
    Membre averti Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Points : 417
    Points
    417
    Par défaut
    et avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     strcpy (commande2, "cp ");
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     strcat (commande2, "cp ");
    Ca change quelque chose ? car la premiere fois je sais pas a quoi tu concatene ton truc

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 62
    Points : 83
    Points
    83
    Par défaut
    Je suppose que tes nomfichier_me* sont des AnsiString.
    Dans ce cas, je te propose de continuer avec les AnsiString.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    AnsiString commande2;
    commade2.printf("cp %s %s", nomfichier_me_temp, nomfichier_me);
     
    cout << "\nCOMMANDE 2" << endl;
    cout << commande2.c_str() << endl;
     
    etat = system(commande2.c_str());
    Ha non, je me suis trompé de forum, ça doit plutôt être des string
    Oublie !

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Effectivement, strcat concatène une chaine à la fin d'une autre. Donc si ta chaine c'est n'importe quoi, ça concatenera n'importe ou (au 1er \0 trouvé en l'occurence).

    http://c.developpez.com/faq/cpp/?page=strings

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <string>
     
    std::string commande2 = "cp" + nomfichier_me_temp + " " + nomfichier_me;
    etat = system(commande2.c_str());

  5. #5
    Membre averti Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Points : 417
    Points
    417
    Par défaut
    Citation Envoyé par Loulou24
    Effectivement, strcat concatène une chaine à la fin d'une autre. Donc si ta chaine c'est n'importe quoi, ça concatenera n'importe ou (au 1er \0 trouvé en l'occurence).
    Comme quoi je ne dit pas que des conneries lol

  6. #6
    Membre averti
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Points : 369
    Points
    369
    Par défaut
    Citation Envoyé par Troll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    AnsiString commande2;
    commade2.printf("cp %s %s", nomfichier_me_temp, nomfichier_me);
     
    cout << "\nCOMMANDE 2" << endl;
    cout << commande2.c_str() << endl;
     
    etat = system(commande2.c_str());
    Sauf qu'AnsiString c'est pas du C++ standard, c'est une classe de la VCL de C++Builder, introduite pour l'équivalence avec les chaînes AnsiString de Delphi.

    [Edit]Ok j'avais pas vu l'edit ^^, fait pendant que je postais :p[/edit]

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    En utilisant std::string cela fonctionne

    Merci beaucoup !

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Bonjour

    J'ai essayer cette façon de faire et ça ne fonctionne pas... pouvez-vous m'aider s'il vous plaît
    voici le code C(++):

    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
    #include <iostream>
    #include <stdlib.h>
    #include <string.h>
    #include <string>
     
    int main(){
      int h=12, min=00, sec=00;  //j'impose l'heure à MIDI
     
      std::string commande = "TIME " + h + ":" + min + ":" + sec;
      cout << commande << endl; //je veux afficher TIME 12:00:00
     
      system("PAUSE");	
      return 0;
      exit(0);
    }
    le compilateur n'accepte pas cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string commande = "TIME " + h + ":" + min + ":" + sec;
    et je sais pas pourquoi...

    [Balise [code] ajouté par netah_25 - merci d'y penser a l'avenir]

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il faut que le premier terme de la concaténation soit un string.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string commande = std::string("TIME ") + h + ":" + min + ":" + sec;

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Merci pour ta réponse, mais même avec la modif le compi ne l'accepte pas...
    je suppose plutôt que ça provient du mélange types : string avec int...
    ce n'est juste qu'une supposition, je peux me tromper.

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Hmm en effet, j'avais pas fait gaffe. Je croyais que tu étais resté sur l'exemple précédent qui ne comportait que des chaînes. Il faudra ici passer par un ostringstream.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <sstream>
     
    std::ostringstream oss;
    oss << "TIME " << h << ":" << min << ":" << sec;
    std::string commande = oss.str();

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    J'te remercie de tout coeur !!!!
    ça roule, impeccable !!

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

Discussions similaires

  1. initialisation de tableaux
    Par takout dans le forum Débuter
    Réponses: 13
    Dernier message: 22/01/2014, 09h30
  2. [CR 9] Initialisation de tableaux avec l'ensemble des enregistrement
    Par linger dans le forum Formules
    Réponses: 8
    Dernier message: 18/06/2009, 20h23
  3. De l'initialisation des tableaux dynamiques de Record
    Par metanil dans le forum Langage
    Réponses: 13
    Dernier message: 03/01/2008, 16h54
  4. initialisation de tableaux et recupération d'un element
    Par crazykangourou dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 24/10/2007, 14h23
  5. [debutant] declaration et initialisation de tableaux
    Par harsh dans le forum Débuter
    Réponses: 12
    Dernier message: 18/03/2005, 23h39

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