начнем с того, что к C++ это не имеет никакого отношения.
закончим тем, что w_str отдает тебе юникод, если гугл не врет, то это строки C++ Builder'a и он имеет c_str() который отдаст тебе строку в ANSI, но русские символы потеряются скорее всего.
Здесь прекрасна каждая строка.
IK>Текст в r получается с нулями '\0' после каждого символа. Как скопировать без нулей ?
Для начала следует понять, что именно вы копируете, куда именно вы копируете, каков размер копируемых данных, и вообще — нужно ли вам именно копировать, а не преобразовывать из одного формата в другой.
Для начала:
1. Строковые объекты в С++ лучше всего копировать не через memcpy, а через присваивание.
2. sizeof(r->n) дает размер поля во время компиляции.
3. w_str(), скорее всего, возвращает строку в Юникоде.
Х>Здесь прекрасна каждая строка.
IK>>Текст в r получается с нулями '\0' после каждого символа. Как скопировать без нулей ?
Х>Для начала следует понять, что именно вы копируете, куда именно вы копируете, каков размер копируемых данных, и вообще — нужно ли вам именно копировать, а не преобразовывать из одного формата в другой.
Х>Для начала: Х>1. Строковые объекты в С++ лучше всего копировать не через memcpy, а через присваивание. Х>2. sizeof(r->n) дает размер поля во время компиляции. Х>3. w_str(), скорее всего, возвращает строку в Юникоде.
Здравствуйте, IgorKr, Вы писали:
Х>>Для начала: Х>>1. Строковые объекты в С++ лучше всего копировать не через memcpy, а через присваивание. Х>>2. sizeof(r->n) дает размер поля во время компиляции. Х>>3. w_str(), скорее всего, возвращает строку в Юникоде.
IK>Как лучше присваивать UnicodeString в char ?
Если char ansi, то возможно будет потеря данных. И наверное все-таки char*?
IK>Текст в r получается с нулями '\0' после каждого символа. Как скопировать без нулей ?
А нет ли у ячеек грида метода, аналогичного w_str(), но только для обычных строк? Например, str(), a_str(), c_str()? Билдера в досягаемости нет, сорри.
И как уже сказали выше, возможна потеря данных, если в ячейке лежат символы из разных локалей (т.к. преобразование wide char неизбежно будет приводить к какой-то одной локали — какой именно, надо смотреть сырцы грида).
IK>Текст в r получается с нулями '\0' после каждого символа. Как скопировать без нулей ?
Зачем переводить в C тип для копирования? Манипуляции с string-ами лучше производить средствами C++.
В С++11 можно использовать крутяк copy_if(beg, end, dest, [](char c){return (c!='\0');})
Если нет, то string::value_type pos=str.find('\0'); str.copy(char* dest, pos,0);
В указатель на ANSI или Unicode char имхо нужно только при передачах массивов в функции с прототипами char* в определениях.
IgorKr, не мучай людей догадками, напиши свою структуру record, чтобы четко было понятно, какой тип у параметров n, name, s1, s2.
И напиши, какой тип у тебя у StringGrid1->Cells, AnsiString или UnicodeString.