Помогите с указателями
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Вот программа
пробовала str вынести из функции main — та же фигня.
Почему access violation?? str вроде обычный указатель на char без всяких const.
Как поправить?
Надо что бы в программе были забиты строки, а во время работы чтобы программа меняла эти строки и выводила на экран.
Пока сделала через копирование во временный буфер. Но хотелось бы менять строки напрямую.
хз
Во-первых, такой код давно не валиден для C++. В C++ там должен быть const.
Потому что строковые литералы будут сохранены где-то в read-only памяти (а то и еще круче), писать в которую простому смертному запрещено.
Завести свой массив не судьба?
char str[] = «String»;
Компилятор ни чего не говорит на счёт невалидности кода. Даже предупреждений не дает.
А почему зтот код не валиден? Это где-то написано? в стандарте например?
О, спасибо, так работает.
Я думала (так объясняли), что
это одно и то же.
Я даже в программе специально const убрала, что бы не смущщал.
А если делать массив, то как тогда сделать массив строк?
Если так:
то получается как и с
а написать что-то типа char str[][] нельзя.
Можно char str[][20], но тогда под короткие строки выделяется лишнее место.
Что посоветуете?
Использовать std::string или std::string_view (c++17).
Что-то мне подсказывает, что это экономия на спичках.
Эт какой это? Ежели gcc(mingw)/clang, то ключ
-pedantic-errors
скормите ему.В нем, родимом. Емнип, то в c++98 такое преобразование уже было объявлено устаревшим, а из c++11 — удалено вовсе.
Вообще-то я победила проблему. Вот таким неэлегантным способом:
Если кто подскажет как это сделать без определения лишних переменных, буду признательна.
Вопрос даже не в экономии.
Я пока не знаю какой длины будет самая длинная строка. А в описании массива это надо указать. Да и подсчитывать букавки в строке вручную как-то не хочется.
Но все равно спасибо!
Компилятор Visual Studio 2017. Настройки проекта по умолчанию.
Можно что-нибудь придумать на макросах и шаблонах, но это будет значительно сложнее.
Тогда почему не std::string?