Прежде всего, я согласен со всеми остальными использовать std::string
вместо массивов символов в подавляющем большинстве случаев.Ссылка для справки здесь: Библиотека C ++ Strings
Теперь, чтобы прямо ответить и на ваш вопрос:
*lab="\0";
*mne="\0";
and so on.....
Это неправильно.Предполагая, что ваш компилятор не выдает ошибку, вы не присваиваете «нулевой терминатор» этим массивам, вы пытаетесь присвоить значение указателя, где строка "\0"
находится в первых нескольких местах памяти, гдеchar * указывает на!Помните, что ваши переменные - это указатели, а не строки.Если вы пытаетесь просто поставить нулевой символ в начале, чтобы strlen
или другие функции C-строки видели «пустую» строку, сделайте следующее: *lab='\0';
Разница в том, что с одиночными тикамиобозначает символ \0
, тогда как с двойным, это строковый литерал, который возвращает указатель на первый элемент.Надеюсь, это имело смысл.
Теперь, во-вторых, вы не можете просто так "назначить" строки в стиле C.Вам нужно поместить каждый символ в массив и правильно завершить его.Обычно самый простой способ - с помощью sprintf
:
sprintf(lab, "%s", "mystring");
Это может не иметь особого смысла, тем более что я не разыменую указатель, но я проведу вас по нему,Первый аргумент говорит sprintf «выводить ваши символы туда, куда указывает этот указатель».Так что нужен необработанный указатель.Вторая строка формата, как printf
использует.Поэтому я говорю использовать первый аргумент в качестве строки.И третий - то, что я хочу там, указатель на другую строку.Этот пример также будет работать с sprintf(lab, "mystring")
.
Если вы хотите заняться обработкой строк в стиле C, вам нужно прочитать несколько примеров.Боюсь, я даже не знаю, где искать в сети хорошие примеры этого, но я желаю вам удачи.Я настоятельно рекомендую вам проверить библиотеку строк C ++ и тип basic_string<>
там.Это typedef'd для просто std :: string, и это то, что вы должны использовать.