Il problema viene da un esercizio su C++ Primer 5th Edition:Come inizializzare elegantemente il vettore <char *> con stringa letterale?
scrivere un programma per assegnare gli elementi da un elenco di puntatori char * a stringhe di caratteri in stile C per un vettore di stringhe.
---------------- Domanda Oringinal ------------
Prima cerco il seguente modo un po 'diretta:
vector<char *> vec = {"Hello", "World"};
vec[0][0] = 'h';
Ma compilazione del codice ottengo un avvertimento:
temp.cpp:11:43: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
vector<char *> vec = {"Hello", "World"};
^
e l'esecuzione del ./a.out ho un
Segmentation fault (core dumped)
Penso che sia perché provo a scrivere su un const char. Così provo in un altro modo:
char s1[] = "Hello", s2[] = "World";
vector<char *> vec = {s1, s2};
vec[0][0] = 'h';
Questa volta è OK. Ma sembra un po 'noioso. C'è un altro modo elegante per inizializzare un vettore con stringhe letterali?
Non è possibile modificare il contenuto di una stringa letterale. Si prega di usare 'std :: vector' ('std :: string' può essere costruito da una stringa letterale) [esempio live] (http://coliru.stacked-crooked.com/a/e0a7821f557b64b8) –
Borgleader
I valori letterali delle stringhe sono' array of n const char', puoi trovare maggiori dettagli [qui] (http://stackoverflow.com/q/21529194/1708801). La conversione era ok in C ma non è consentita in C++, esattamente a causa del problema con il tentativo di modificarli che è un comportamento non definito. –
@Borgleader So che è meglio usare il vettore ma l'esercizio su primer C++ mi chiede di convertire un vettore nel vettore . Quindi mi chiedo come inizializzarlo. –
Warbean