"deprecated conversion" tableau 2D + pointeur

Résolu
Debutant en webmastering Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   -
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
A voir également:

2 réponses

mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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://forums.commentcamarche.net/forum/affich-37604421-introduction-a-la-stl-en-c-standard-template-library

Bonne chance
1
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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
0
Debutant en webmastering Messages postés 401 Date d'inscription   Statut Membre Dernière intervention  
 
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.
0