| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Копирование строки |
| Автор: RomanK 25.8.2011, 17:11 | ||
| Я новичек в С++. Ни как не получается сделать одну вещь и не понимаю почему происходит не то, что я хочу. Я хочу только лишь получить строку, которая будет состоять из уже существующей строки, плюс еще что-нибудь! Вобщем есть код:
Вобщем по моей логике после этого кода в строке str1 должно оставаться "AB", а в строке str2 должно появится ABCDE. Но нихрена подобного. Почему-то из строки str1 исчезает AB! Помогите пожалуйста. |
| Автор: hils 25.8.2011, 17:56 |
| str1[2] = 0; ты ноль зачем char'у присваиваешь? Конечно можно, но не ясна логика. Если же ты хотел закончить строку, то тебе нужно использовать '\0'. |
| Автор: RomanK 25.8.2011, 18:05 | ||
| hils, да я хотел строку закончить. В этом ошибка???? Счас попробую.... Добавлено через 2 минуты и 59 секунд hils, неа. Не в этом дело. Все равно исчезает! Я сейчас заметил, что исчезает значение из str1, когда делаешь вот это:
То есть когда делаешь первое копирование - все ок! Но при чем тут эта строка и str1? Значит проблема в адресах и т.п. В этом я вобще ньюб. Помогите пожалуйста, как сделать так, чтобы работало как я хочу! |
| Автор: rodnover 25.8.2011, 18:09 | ||||
Это одно и то же. А случайно не юникодовая кодировка используется? Если не сложно кинь значения переменных, которые после конкантенации получаются. И попробовать вот так:
|
| Автор: hils 25.8.2011, 18:16 | ||
На будущее всегда заканчивай строку управляющей символьно константой '\0', тогда строка будет считаться завершенной.
на выходе строка str2 в которой "ABCDE" и str1 в которой "AB" |
| Автор: volatile 25.8.2011, 23:44 | ||
|
| Автор: RomanK 29.8.2011, 01:04 | ||
| Всем большое спасибо. Разобрался со своей ошибкой. В реальном таком коде (для моего случая) я ошибся в этой строке: char str2[12]; Копируемая строка в эту переменную была больше чем 12 симоволов... Добавлено через 3 минуты и 40 секунд volatile, в С++ программировать только начинаю, и исходный пример был именно с TEXT('A'). Сам не понимаю нахрена этот TEXT нужен. У себя его убрал. Спасибо. По мере программирования своей задачи удивило, что конструкция типа:
Работает! |
| Автор: bsa 31.8.2011, 16:57 |
Чем же? Тем, что с символами идет работа так же, как и с числами? Ну так символы это и есть числа. Просто на экран они выводятся особым образом. |
| Автор: volatile 1.9.2011, 00:33 | ||
макрос TEXT() задуман мелкомягкими для написания программ, компилируемым одновременно и как юникодные и как не юникодные. в юникодных он превращается: в L"sometext", в неюникодных: "sometext" В вашем случае вы присваиваете техт переменной типа чар. Что в юникодной версии вызовет ошибку компиляции. поэтому смысла здесь в макросе TEXT абсолютно нет. ЗЫ: был бы смысл если бы было:
ну и все функции типа strcpy() заменить на соответствующие _tcscpy() и т.д... (вообще всю программу перепахать изрядно бы пришлось) Но так как этого нет, то и TEXT() не нужен. |