Итак, пытаясь научиться использовать C-Strings в C++, у меня возникают проблемы с распределением памяти.Как выделить память для массива символов c-string?
Идея состоит в том, что создается новая строка формата (s1 + sep + s2) Текст, который я использую, содержит заголовок, поэтому я не могу его изменить, но у меня возникают проблемы пытаясь установить размер char str []. Я получаю сообщение о том, что sLength не является константой и поэтому не может использоваться для установки размера массива. Я относительно новичок в C++, так что это вопрос из двух частей.
Эта стратегия фактически выделяет память для нового массива?
Как установить размер массива правильно, если я не могу получить постоянное значение с помощью strlen (char *)?
char* concatStrings(char* s1, char* s2, char sep){ int sLength = strlen(s1) + strlen(s2) + 3; //+1 for char sep +2 for \0 at end of string char *str = new char[sLength]; strcpy (str, s1); str [sLength(s1)] = sep; strcat (str, s2); return str; }
редактирует сделал, так что теперь я не получаю никаких ошибок компилятора, но ...
вызов к функции здесь:
char* str = concatStrings("Here is String one", "Here is String two" , c);
cout<< str;
Мой выход становится:
Здесь находится String onec =================== 22221/21/21/21/2/(и т.д.)/Здесь S tring two
Вам необходимо динамически распределить его. Если вы новичок в C++, я предлагаю придерживаться 'std :: string' некоторое время, прежде чем смотреть в строки C. Не выбирайте строки C поверх 'std :: string' для использования, так как есть всевозможные проблемы. – chris
Какие ошибки компилятора вы получаете? –
@chris В общем, я согласен с предложением предпочесть 'std :: string' над строками C. Тем не менее, OP четко заявляет, что это учебное упражнение, которое является вполне обоснованной причиной (ИМО) для использования строк C. –