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 des pointeurs...


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 77
    Points : 45
    Points
    45
    Par défaut Probleme avec des pointeurs...
    Bonjour a tous!!!

    Bon, j'ai encore un probleme avec des chaines. Je suis désolée d'avance car je sais que c'est un sujet traité maintes fois, mais j'ai vraiment du mal....

    voila 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    char * p;
    char** temp;
    int i=0;
     
    if (machin)
    {
    	p = "ma premiere chaine";
    	 if (p)    
    	 {		
    		do
    		{			
     
             //on copie p dans temp
    			int taille = strlen(p);
    			strncpy(temp[i],p,taille);
             //on passe a l'erreur suivante
    			p = "ma prochaine erreur";
    			i++;
    		}while(p)		
    	 }
    }
    En fait, j'ai la chaine p qui change de valeur, et je voudrais mettre dans un tableau de chaine (temp) toutes les valeurs de p.

    Mon probleme est que j'ai une erreur lorsque je fais "strncpy(temp[i],p,taille);"

    Comment dois je faire pour copier ma chaine p dans mon tableu de chaine temp à l'indice i???

    Merci d'avance,
    Barucca

  2. #2
    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 : 39
    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
    Avec les bons outils c'est tout de suite plus facile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <string>
    #include <vector>
     
    std::string p:
    std::vector<std::string> temp;
     
    p = "ma premiere chaine";
     
    do
    {
        temp.push_back(p);
        p = "ma prochaine erreur";
    }
    while(p != "");
    Je t'invite à jeter un oeil à la FAQ pour plus de détails.

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    je suis tout a fait d'accord, mais il n'empeche qu'à titre pédagogique
    c'est pas mal de maitriser les char* avant de passer au string et stl.
    Enfin ça n'est qu'un avis personnel qui en soit est tout à discutable, j'en
    conviens volontiers.
    Aussi la permière chose que je remarque en lisant le code est que les
    allocations de mémoire et désallocation ne sont pas faites.

    si ça peut t'aider ...

    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
     
     
    const unsigned short NB_ERREURS = 1000;
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	char * erreurCourante = NULL;
    	char ** tabErreurCourante = new char * [NB_ERREURS];
    	for (int index=0;index<NB_ERREURS;index++) tabErreurCourante [index] = NULL;//indispensable  ...
    	bool maCondition = true;
     
    	int indexErreur =0 ;
    	if (maCondition)
    	{
    		erreurCourante = "premiere erreur";
    		if(indexErreur<NB_ERREURS)
    		{
    			tabErreurCourante[indexErreur] =new char [strlen(erreurCourante)+1] ; //+1 pour le caractere \0
    			sprintf(tabErreurCourante[indexErreur],"%s",erreurCourante);
    			indexErreur+=1;
    		}
    		else
    		{
    			//allocation insuffisante !!!
    		}
    	}
    	//nettoyage
    	for (int index=0;index<NB_ERREURS;index++)
    	{
    		delete [] tabErreurCourante[index];
    	}
    	delete [] tabErreurCourante;
    	return 0;
    }
    NB) p , temp , i -> c'est mal !!!!!
    A+

  4. #4
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 77
    Points : 45
    Points
    45
    Par défaut
    bonjour,

    merci a vous deux pour votre aide. J'utiliserais les srting et les vectors lorsque je ferais du code qui me sera propre, mais pour le moment je modifie du code existant et je dois garder les char*....
    lepoutho : je vais regarder ton exemple et m'en inspirer, j'espere que je vais y arriver!!

    merci beaucoup en tout cas.

  5. #5
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 77
    Points : 45
    Points
    45
    Par défaut
    ca marche, merci!!

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par lepoutho
    je suis tout a fait d'accord, mais il n'empeche qu'à titre pédagogique c'est pas mal de maitriser les char* avant de passer au string et stl.
    Enfin ça n'est qu'un avis personnel qui en soit est tout à discutable, j'en
    conviens volontiers.
    Vi.
    A titre pédagogique, je préfère que l'"étudiant" maitrise l'algorithmique avant les méandres de la gestion de la mémoire. Comme on faisait en Ada, Pascal, ... quoi.
    Et pour ça, rien de tel que d'utiliser les abstractions fournies par le langage.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

Discussions similaires

  1. probleme avec les pointeurs sur des objet heterogene
    Par Fifou625 dans le forum Débuter
    Réponses: 4
    Dernier message: 09/12/2011, 21h27
  2. Réponses: 2
    Dernier message: 21/03/2007, 10h55
  3. Réponses: 2
    Dernier message: 21/02/2007, 13h28
  4. Probleme avec des socket !
    Par Ptimath44 dans le forum Réseau
    Réponses: 11
    Dernier message: 31/10/2005, 18h11
  5. Problemes avec des cellules vides
    Par arsgunner dans le forum ASP
    Réponses: 7
    Dernier message: 14/06/2004, 08h42

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