| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Добавление вручную признака конца строки |
| Автор: JTut 13.10.2008, 12:29 |
| Такая запись, как я понял, вызывает глюки s[i]='\0'; Как тогда его добавить? |
| Автор: DjoNIK 13.10.2008, 12:33 | ||
| Такая запись вызывает глюки когда ты пытаешься записать элемент по недоступному индексу. Какой у тебя глюк был? можно еще
Но это считай тоже самое |
| Автор: JTut 13.10.2008, 12:54 |
| Определили строку s2 Нужно скопировать все символы из строки s2 в строку s3 (Это упрощенный вариант моей задачи) char* s3; for (int i=0; i<=strlen(s2); i++) { if (s2[i]=='\0') { s3 = new char[i+1]; for(int k=0; k<i;k++) { s3[k]=s2[k]; } s3[k+1] = '\0'; printf(s3); } } Если я ввожу слово Привет, то он пишет Привет= Если я выделяю память под массив стандартным образом, то есть char s3[20], то он дописывает к концу строки вообще непонятный символ Кстати, ваш вариант не помог |
| Автор: mrbrooks 13.10.2008, 12:56 |
| JTut, а strcpy() использовать запрещают религиозные убеждения? |
| Автор: mes 13.10.2008, 13:05 | ||
намутили Вы с решением
|
| Автор: JTut 13.10.2008, 13:19 |
| В том то и дело, что мне по заданию нужно сделать без этих копи. я пытаюсь вручную сделать. Но я понял for(int k=0; k<i;k++) { s3[k]=s2[k]; } s3[k+1] = '\0'; Тут нужно было дописать s3[k]='\0' , так как k на выходе из цикла будет на 1 больше, то есть равно i. Это я по коду copy понял. Все, всем спасибо. |
| Автор: mes 13.10.2008, 13:37 |
обратите также внимание и на цикличное выделение памяти |
| Автор: JTut 13.10.2008, 13:48 |
| Да, кстати, спасибо, что напомнили. Если вот так в цикле постоянно выделять память, то она будет увеличиваться ли просто перезаписываться? Просто мне не удалось ее очистить с помощью функции delete [] |
| Автор: DjoNIK 13.10.2008, 13:53 |
| Таким образом ты будешь постоянно резервировать новые области из кучи. Почему не удалось использовать delete []? Код покажи. |
| Автор: JTut 13.10.2008, 19:49 |
| Все удалось, надо было так написать delete [] S; |
| Автор: mes 13.10.2008, 20:12 |
надеюсь операцию выделения памяти Вы все таки вынесли из цикла ) |
| Автор: inside_pointer 14.10.2008, 10:22 | ||||
ты написал
так не делается, т.к. не всегда можно проконтролировать отсутствие символа % в строке s3 он управляющий для функции, и она будет искать аргументы после s3, а там память |