"deprecated conversion" tableau 2D + pointeur [Résolu/Fermé]

Signaler
Messages postés
401
Date d'inscription
lundi 6 juin 2011
Statut
Membre
Dernière intervention
27 janvier 2021
-
Messages postés
29704
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
12 avril 2021
-
Bonjour,

lors de la compilation de mon programme j'obtiens"warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]"

ce que je souhaite faire c'est récupérer des chaînes de caractères un peu comme un tableau en 2D avec comme contrainte que la ligne soit un pointeur
J'ai donc codé comme ceci :
char **timezone = new char* [25];
 for(int i = 0; i < N; ++i)
    timezone[i] = new char[25];
timezone[0] = ("2015/10/06 06:23:54");
cout << timezone[0] << endl;


y'a-t-il une façon de reproduire ce résultat en n'ayant plus ce warning ? car en essayant d'autres façons de faire, je fais face à des "impossible to convert char to char*"



Cordialement,  Debutant en webmastering

2 réponses

Messages postés
29704
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
12 avril 2021
7 066
Là je cherche des informations sur la manipulation des vecteurs mais c'est quelque chose que je ne maîtrise pas.

Il suffit de te référer à la documentation, tu verras qu'il y a de nombreux containers.
http://www.cplusplus.com/reference/vector/vector/

Une introduction :
https://www.commentcamarche.net/faq/11255-introduction-a-la-stl-en-c-standard-template-library

Bonne chance
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
29704
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
12 avril 2021
7 066
Bonjour,

Ici tu recopies l'adresse de la chaine statique "2015/10/06 06:23:54" (
const char *
) dans un pointeur de type
char *
. Sémantiquement ça n'est donc pas correct. Il faudrait à la rigueur recopier la chaîne statique dans timezone.

Ensuite si l'idée de ton tableau est de ne construire qu'une liste de chaîne statique, inutile d'allouer les caractères associées à chacune de ces strings. Les strings statiques sont déjà allouées car elles sont statiques, du coup ton tableau timezone a juste besoin de les "référencer".

De plus il est inutile de faire un new ici vue que la taille de timezone semble connue à la compilation. Une allocation statique fera amplement l'affaire. Si tu veux faire une allocation dynamique il faudrait au moins faire le
delete
correspondant.

#include <iostream>

int main(){
    const char **timezone = new const char* [25];
    timezone[0] = "2015/10/06 06:23:54";
    std::cout << timezone[0] << std::endl;
    delete timezone;
    return 0;
}


Mais personnellement j'écrirais directement :

#include <iostream>
#include <array>

int main(){
    std::array<const char *, 25> timezones = {
        "2015/10/06 06:23:54",
        "2015/11/07 01:23:54",
    };
    for (const char *timezone : timezones) {
        std::cout << timezone << std::endl;
    }   
    return 0;
}


Ou même :

#include <iostream>
#include <vector>

int main(){
    std::vector<const char *> timezones = {
        "2015/10/06 06:23:54",
        "2015/11/07 01:23:54",
    };
    for (const char *timezone : timezones) {
        std::cout << timezone << std::endl;
    }   
    return 0;
}


Bonne chance
Messages postés
401
Date d'inscription
lundi 6 juin 2011
Statut
Membre
Dernière intervention
27 janvier 2021
1
Tout d'abord merci pour la réponse.
J'avais pour but de récupérer différentes valeurs d'un CSV et de les placer au sein des différents tableaux.
J'ai réalisé ceci afin de créer un objet qui récupérerait l'ensemble des valeurs timezone et d'autres composantes et ce dans le but de pouvoir éventuellement changer leur type (char to float pour effecteur des traitements mathématiques [ps: timezone me sert juste d'identifiant"]).
Il y a bel et bien un delete timezone[] à la fin de mon programme.
Là je cherche des informations sur la manipulation des vecteurs mais c'est quelque chose que je ne maîtrise pas.