Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование строки 
:(
    Опции темы
RomanK
Дата 25.8.2011, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 25.6.2005
Где: Россия, Выборг

Репутация: нет
Всего: 2



Я новичек в С++. Ни как не получается сделать одну вещь и не понимаю почему происходит не то, что я хочу. Я хочу только лишь получить строку, которая будет состоять из уже существующей строки, плюс еще что-нибудь!

Вобщем есть код:

Код

char str1[3];
str1[0] = TEXT('A');
str1[1] = TEXT('B');
str1[2] = 0;

char str2[12];
strcpy( str2, str1 );
strcat( str2, "CDE" );


Вобщем по моей логике после этого кода в строке str1 должно оставаться "AB", а в строке str2 должно появится ABCDE. Но нихрена подобного. Почему-то из строки str1 исчезает AB! smile Как сделать чтобы не исчезало? Я ведь копирую из строки str1 в str2. А оно как будто вырезается. Я уже заколебался этот вопрос решать, часа 4 бьюсь, не могу решить!

Помогите пожалуйста.

Это сообщение отредактировал(а) RomanK - 25.8.2011, 17:13
PM MAIL WWW ICQ   Вверх
hils
Дата 25.8.2011, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 20.4.2011

Репутация: нет
Всего: нет



str1[2] = 0;

ты ноль зачем char'у присваиваешь? Конечно можно, но не ясна логика.
Если же ты хотел закончить строку, то тебе нужно использовать '\0'.
PM MAIL   Вверх
RomanK
Дата 25.8.2011, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 25.6.2005
Где: Россия, Выборг

Репутация: нет
Всего: 2



hils, да я хотел строку закончить.
В этом ошибка????

Счас попробую....

Добавлено через 2 минуты и 59 секунд
hils, неа. Не в этом дело. Все равно исчезает!

Я сейчас заметил, что исчезает значение из str1, когда делаешь вот это:
Код

strcat( str2, "CDE" );

То есть когда делаешь первое копирование - все ок! Но при чем тут эта строка и str1? Значит проблема в адресах и т.п. В этом я вобще ньюб. Помогите пожалуйста, как сделать так, чтобы работало как я хочу!
PM MAIL WWW ICQ   Вверх
rodnover
Дата 25.8.2011, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: 2
Всего: 10



Код

str1[2] = 0;
str1[2] = '\0';


Это одно и то же. А случайно не юникодовая кодировка используется?

Если не сложно кинь значения переменных, которые после конкантенации получаются.

И попробовать вот так:

Код

char *str1 = "AB";


Это сообщение отредактировал(а) rodnover - 25.8.2011, 18:17
PM MAIL   Вверх
hils
Дата 25.8.2011, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 20.4.2011

Репутация: нет
Всего: нет



На будущее всегда заканчивай строку управляющей символьно константой '\0', тогда строка будет считаться завершенной.

Код

char str1[3];
str1[0] = 'A';
str1[1] = 'B';
str1[2] = '\0';

char str2[12];
strcpy( str2, str1 );
strcat( str2, "CDE" );


на выходе строка str2 в которой "ABCDE" и str1 в которой "AB"
PM MAIL   Вверх
mes
Дата 25.8.2011, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(hils @  25.8.2011,  17:16 Найти цитируемый пост)
строку управляющей символьно константой '\0', тогда строка будет считаться завершенной.


Цитата(rodnover @  25.8.2011,  17:09 Найти цитируемый пост)
Код

str1[2] = 0;
str1[2] = '\0'

Это одно и то же


Добавлено через 1 минуту и 56 секунд
Цитата(RomanK @  25.8.2011,  16:11 Найти цитируемый пост)
 Ни как не получается сделать одну вещь и не понимаю почему происходит не то, что я хочу. 

описанная ошибка не соответсвует приведенному фрагменту кода.. 



--------------------
PM MAIL WWW   Вверх
volatile
Дата 25.8.2011, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(RomanK @  25.8.2011,  17:11 Найти цитируемый пост)
char str1[3];
str1[0] = TEXT('A');
str1[1] = TEXT('B');
str1[2] = 0;

char str2[12];
strcpy( str2, str1 );
strcat( str2, "CDE" );


PM MAIL   Вверх
RomanK
Дата 29.8.2011, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 25.6.2005
Где: Россия, Выборг

Репутация: нет
Всего: 2



Всем большое спасибо. Разобрался со своей ошибкой.
В реальном таком коде (для моего случая) я ошибся в этой строке:

char str2[12];

Копируемая строка в эту переменную была больше чем 12 симоволов...

Добавлено через 3 минуты и 40 секунд
volatile, в С++ программировать только начинаю, и исходный пример был именно с TEXT('A'). Сам не понимаю нахрена этот TEXT нужен. У себя его убрал. Спасибо.
По мере программирования своей задачи удивило, что конструкция типа:
Код

char i;
for ( i = 'A'; i <= 'Z'; i ++)
{
    // It works.
}

Работает! smile 
PM MAIL WWW ICQ   Вверх
bsa
Дата 31.8.2011, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(RomanK @  29.8.2011,  01:04 Найти цитируемый пост)
По мере программирования своей задачи удивило

Чем же? Тем, что с символами идет работа так же, как и с числами? Ну так символы это и есть числа. Просто на экран они выводятся особым образом.
PM   Вверх
volatile
Дата 1.9.2011, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(RomanK @  29.8.2011,  01:04 Найти цитируемый пост)
не понимаю нахрена этот TEXT нужен.

макрос TEXT() задуман мелкомягкими для написания программ, компилируемым одновременно и как юникодные и как не юникодные.
в юникодных он превращается: в L"sometext", в неюникодных: "sometext"

В вашем случае вы присваиваете техт переменной типа чар. Что в юникодной версии вызовет ошибку компиляции.
поэтому смысла здесь в макросе TEXT абсолютно нет.

ЗЫ: был бы смысл если бы было:
Код

TCHAR str1[3];
str1[0] = TEXT('A');
str1[1] = TEXT('B');
str1[2] = 0;

ну и все функции типа strcpy() заменить на соответствующие _tcscpy() и т.д...
(вообще всю программу перепахать изрядно бы пришлось)
Но так как этого нет, то и TEXT() не нужен.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0534 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.