"deprecated conversion" tableau 2D + pointeur

Résolu/Fermé
Debutant en webmastering Messages postés 401 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2021 - Modifié le 15 juin 2017 à 16:34
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 28 juin 2017 à 09:51
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 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
28 juin 2017 à 09:51
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 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
27 juin 2017 à 10:00
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 lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2021
27 juin 2017 à 11:41
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