The problem comes from an exercise on C++ Primer 5th Edition:
Write a program to assign the elements from a list of char* pointers to C-style character strings to a vector of strings.
----------------Oringinal Question------------
First I try the following somewhat direct way:
vector<char *> vec = {"Hello", "World"};
vec[0][0] = 'h';
But compiling the code I get a warning:
temp.cpp:11:43: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
vector<char *> vec = {"Hello", "World"};
^
And running the ./a.out I get a
Segmentation fault (core dumped)
I think it is because I try to write to a const char. So I try another way:
char s1[] = "Hello", s2[] = "World";
vector<char *> vec = {s1, s2};
vec[0][0] = 'h';
It is OK this time. But it seems a little tedious. Is there any other elegant way to initialize a vector with string literal?
Here's one way:
Just remember to:
Although from the wording of the question, syntactically it's the same work either way if it was a
vector<const char*>as if it were avector<char*>anyway (you're not modifying the source when you're copy, so doesn't matter if you could modify the source), so I would stick to the exercise as if you just did: