begin process at 2012 05 29 14:33:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

probleme creation de tableaux à taille dynamique


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme creation de tableaux à taille dynamique

lundi 1 octobre 2007 à 05:11:11 | probleme creation de tableaux à taille dynamique

veka61

Bonjour tout le monde,

Voila j'essai depuis plusieurs jour de creer une fonction pour transformer un string en char seulement j'obtient une erreur que je ne sait pas resoudre .
Donc je compte sur vous pour éclairer ma lanterne . 


Voici mon code :
----8<-------------------------------------------------------------------------------------------------------------------------------------------------------
#include <fstream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;

char string_to_char ( string stexte )
{
        int t = stexte.length();
        char ctexte [t] ;
        for (int a = 0 ; a < t ; a++ )
        {
            ctexte[a] = stexte[a] ;
        }             
        ctexte[t] = 0 ;       
    return *ctexte;
}


int main(int Argc, const char *Argv[])
{
    clrscr() ;
   
// Conversion de string en const char c'est a dir en lecture seul ;(
    string stexte = "bonjour tout le monde" ;
    cout <<"\n String = " << stexte << " -------> " << " Char = " ;   
    int index = stexte.length();
    char ctexte [index] = string_to_char (stexte) ;   
    cout << ctexte << "\n\n\n"<< endl ;
       
     return 0;
}
--------------------------------------------------------------------8<---------------------------------------------------------------------------------------

Ainsi que mon message d'erreur:

test2.cpp:29: erreur: variable-sized object «ctexte" may not be initialized


Merci d'avance .
lundi 1 octobre 2007 à 08:23:48 | Re : probleme creation de tableaux à taille dynamique

Pistol_Pete

Dans ta fonction string_to_char(), tu renvoies une variable locale !
Fait ton allocation dynamique dans cette fonction et renvoyes l'adresse que tu stock dans le pointeur ctexte du main.

Ce code devrait marcher:

#include <fstream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;

char *string_to_char ( string stexte )
{
        int t = stexte.length();
        char *ctexte=new char[t+1];        //+1 pour le '\0'
        for (int a = 0 ; a < t ; a++ )
        {
            ctexte[a] = stexte[a] ;
        }             
        ctexte[t] = 0 ;       
    return ctexte;
}


int main(int Argc, const char *Argv[])
{
   
    char *ctexte;

    // Conversion de string en const char c'est a dir en lecture seul ;(
    string stexte = "bonjour tout le monde" ;
    cout <<"\n String = " << stexte << " -------> " << " Char = " ;   
    int index = stexte.length();
    ctexte= string_to_char (stexte) ;   
    cout << ctexte << "\n\n\n"<< endl ;
       
     return 0;
}

A+
lundi 1 octobre 2007 à 08:26:06 | Re : probleme creation de tableaux à taille dynamique

Pistol_Pete

Et surtout après avoir utilisé ta variable, n'oublie pas de la désallouer:
delete []ctexte

A+
lundi 1 octobre 2007 à 08:56:05 | Re : probleme creation de tableaux à taille dynamique

buno

Administrateur CodeS-SourceS
Salut,
Sauf erreur de ma part, si tu fais sTexte.data(), tu obtiens directement un char *. Pas besoin donc de faire une fonction de conversion, à moins bien sûr que ce ne soit un exercice...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
lundi 1 octobre 2007 à 10:09:15 | Re : probleme creation de tableaux à taille dynamique

DeAtHCrAsH

Pistol_Pete  : Tu repproche à veka 61 de renvoyer une variable locale.... Mais dans ton exemple tu fais pire.. Tu renvoies un pointeur local à ta fonction!!! En gros à la sortie de ta fonction tu n'est pas sure de ce que vaudra le pointeur!

L'unique solution est d'utiliser un paramètre de sortie.
Voici un prototype de fonction qui conviendrai.

int string_to_char(string src, char * dest);  // La fonction "alimente" un  pointeur déjà défini par l'appelant et renvoi par exemple la taille de la chaîne résultante.

Sinon pour convertir une strign en char* tu as la propriété c_str() (ex: cTexte.c_str())

Shell
lundi 1 octobre 2007 à 11:49:55 | Re : probleme creation de tableaux à taille dynamique

luhtor

DeAtHCrAsH =>"Mais dans ton exemple tu fais pire.. Tu renvoies un pointeur local à ta fonction!!! En gros à la sortie de ta fonction tu n'est pas sure de ce que vaudra le pointeur!"
=> La solution proposée par Pistol_Pete est tout a fait correcte. Sa fonction renvoie une adresse qui est récupérée dans la variable ctexte;
ctexte = string_to_char (stexte);

Le seul défaut, c'est de devoir désallouer soi meme la mémoire allouée par une fonction.



lundi 1 octobre 2007 à 17:54:50 | Re : probleme creation de tableaux à taille dynamique

veka61

Tout d'abord merci pour toute vos reponses,

la solution de Pistol_Pete fonctionne seulement je cherche a creer un char et nom un pointeur !
Le but et de creer une fonction qui me renvoi un char classique.

J'ai deja réussi la transformation mais sans fonction pour etre plus claire voici se que je voudrait faire avec une fonction.

-----8<-------------------------------------------------------------------------------------------------------------------------------------------------

#include <fstream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;


int main(int Argc, const char *Argv[])
{
    string stexte = "bonjour tout le monde" ;  
    int n = stexte.length( ) ;  
   char texte[n] ;
    for ( int i=0 ; i<n ; i++ )
            {
                    texte[i] = stexte[i] ;
            }
    texte[n]=0 ;              // texte est un char

      
     return 0;
}


----------8<--------------------------------------------------------------------------------------------------------------------------------------------

Sinon je cnnait deja la solution : c_str() mais elle ne me convient pas. 

alors d'autre idée ?
lundi 1 octobre 2007 à 17:58:55 | Re : probleme creation de tableaux à taille dynamique

buno

Administrateur CodeS-SourceS
char texte[n];   --> ne marche pas car n est une variable.

char * pTexte = new char(n); --> OK mais ne pas oublier de faire un delete après utilisation!

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
lundi 1 octobre 2007 à 18:04:00 | Re : probleme creation de tableaux à taille dynamique

veka61

Je suis désoler buno mais mon code fonctionne tres bien !
essai avec cela :


#include <fstream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;


int main(int Argc, const char *Argv[])
{
    string stexte = "bonjour tout le monde" ;  
    int n = stexte.length( ) ;  
   char texte[n] ;
    for ( int i=0 ; i<n ; i++ )
            {
                    texte[i] = stexte[i] ;
            }
    texte[n]=0 ;              // texte est un char
    cout << "string = "<< stexte << "  ------------>   Char = "<<texte<<endl;
      
     return 0;
}

lundi 1 octobre 2007 à 18:57:45 | Re : probleme creation de tableaux à taille dynamique

luhtor

"la solution de Pistol_Pete fonctionne seulement je cherche a creer un char et nom un pointeur !"
=> Je crois que tu devrais te plonger un peu dans un livre de C.

"Je suis désoler buno mais mon code fonctionne tres bien !"
=> C'est pas parce que ca marche dans ton exemple, que c'est correct.

1 2

Cette discussion est classée dans : string, include, char, stexte, ctexte


Répondre à ce message

Sujets en rapport avec ce message

Visual C++ Free() [ par PRZYBYLSKI ] #include #include #include "stdafx.h"Question au Pro?Qu'es qui est faux docteurArrivé à free ça bombe#include <io Différence char - string [ par herlockg ] Bonjour,Voilà, je me demandais quelle était la différence exacte entre le type string et le type char. De plus, il pourquoi n'est-il pas nécessaire d' La class string [ par jderf ] Je suis débutant et je teste la class string. Voici un code tous simple, mais y'a un probleme de conversion à la compil que je ne comprend pas. Les er Recréer la fonction strstr [ par qubs ] Salut, J'aimerais recoder la fonction strstr mais je n'arrive pas a aboutir et a comprendre le fonctionnement, j'aimerais bien un coup de main svp. = Convertir unsigned char en string^ [ par elise42 ] Bonjour à tous, je code en C++ et je cherche à convertir un unsigned char Buffer_Envoi en un string ^Trame. Quelqu'un aurait il une idée? Merci d'a Operateur + (string) [ par victorcoasne ] Bonjour, Je voulais faire un code du genre : [code=cpp]#include #include using namespace std; int main() { string test = "a" + "b"; cout comment gerer ce projet pour que deux etudiants n'aient pas le meme code [ par desco182 ] Salut a tous j'aimerais bien que quelqu'un m'aide .#include#include#include#ifndef ETUDIANT_H#define ETUDIANT_Hclass etudiant{int code;<br / problème de fonction de tirage aléatoire en poker [ par moonlight2509 ] Salut, étant en débutant en langage c mon problème paraît peut-être très bête!! Voilà j'ai un problème d'argument ou de type de fonction dans la fonct Problème de pointeur : erreur non-lvalue in assignment [ par AmStErDaMnEd ] Bonjour,    j'ai récupéré un bon de code pour pouvoir splitter une chaine. Cela fonctionne sans pointeur. Cependant, j'ai besoin de récupérer un char*


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales