Почему я не могу инициализировать локальный массив со строкойC++ массив инициализации
ответ
Почему я не могу инициализировать локальный массив со строкой
Правильный ответ в том, что вы можете - для заданного определения массива и строки. Чего именно вы хотите достичь?
char str[] = "Hello world";
это лучше будет «const char str []». В противном случае вы можете записать в исполняемые байты. – xtofl
@xtofl: Нет. В приведенном выше коде постоянный строковый литерал * скопирован * в место для записи в памяти. Код безопасен, и 'str' можно безопасно манипулировать. Вы были бы правы, если бы я использовал указатель вместо массива. –
Вопрос очень тощий на деталях, но:
char arr[] = {'a','b','c', 0};
или
char arr[] = "string";
EDIT:
В ответ на вопросы:
char s1[] = "hi";
char s2[] = {'h','i',0};
memcpy(s1, "by", sizeof(s1));
memcpy(s2, "by", sizeof(s2));
cout << ios::hex << &s1 << endl;
cout << ios::hex << &s2 << endl;
cout << s1 << endl;
cout << s2 << endl;
Печать:
80xbfffed72
80xbfffed6f
by
by
По крайней мере, на моей системе это выглядит как распределяются в том же пространстве памяти, я не вижу никаких проблем или разногласий. C, например, определяет string
как массив с нулевым завершающим символом - я считаю, что это то же самое в C++, чтобы не путать с std::string
.
Это не эквивалент: последняя форма позволяет вам, например, memset (arr, 0, 7) и таким образом изменить сегмент данных вашего исполняемого файла. – xtofl
@xtofl: Можете ли вы углубиться в это более подробно? Я почти уверен, что оба они эквивалентны. Было бы иначе, если бы второй был «const char * arr =», но это не так, и я уверен, что цитированная строка является просто специальным синтаксисом для агрегатного инициализатора, и поэтому поведение должно быть идентичным. –
std::vector<std::string> abc(5,"abc");
будет создавать вектор с 5 элементами, инициализированными «abc».
- 1. C массив инициализации
- 2. массив инициализации C
- 3. C Массив инициализации структуры
- 4. C# Массив инициализации на []
- 5. Cython инициализации C-массив
- 6. C++ 2d массив инициализации
- 7. массив инициализации в C
- 8. Класс C++ массив экземпляра инициализации
- 9. C, пропустить статический массив инициализации
- 10. C++ массив объектов, сбой инициализации
- 11. массив функций C++ Ошибка инициализации?
- 12. C Массив инициализации получаю ошибку
- 13. C++ массив векторов инициализации указателей
- 14. массив инициализации
- 15. массив проблема инициализации
- 16. массив инициализации различия
- 17. C++ Массив инициализации массива и Интерактивного
- 18. массив инициализации член класса в C++
- 19. Objective C Массив инициализации метания EXEC_BAD
- 20. Два размера массив символов инициализации C
- 21. массив инициализации порядка оценки в C++
- 22. C++ 11 лямбда-массив инициализации указателей
- 23. C++ Vector <int> массив инициализации
- 24. Массив Ошибка инициализации #define
- 25. Массив инициализации Macro
- 26. Ошибка инициализации инициализации C
- 27. массив инициализации - разница в производительности
- 28. массив инициализации объектов ошибка компилятора
- 29. Ошибка компиляции: массив инициализации байта
- 30. C повторной инициализации массива
Дайте нам код, это может сделать вопрос немного яснее. – mikek
Вы хотите спросить: «Почему я не могу инициализировать локальный массив ** из строки?» –