Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CString to char[][] 
:(
    Опции темы
denis2105
Дата 14.4.2007, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



    
CString  m_EFname="qwerty";
char str[2][10];
*str[0]=m_EFname.GetBuffer(m_EFname.GetLength());


Пишет  :error C2440: '=' : cannot convert from 'char *' to 'char'
Что делать? Где косяк?
PM MAIL   Вверх
Greeen
Дата 14.4.2007, 10:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

CString  m_EFname = _T("qwerty");
TCHAR str[2][10];
lstrcpy(str[0], m_EFname);



--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
Dov
Дата 14.4.2007, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Код
CString  m_EFname="qwerty";
char str[2][10];
char* p = str[0];
p = m_EFname.GetBuffer(m_EFname.GetLength());


Добавлено через 8 минут и 45 секунд
Не, опять что-то не то.  smile 
Видать ещё не отошёл от вчерашнего.  smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
dizzy1984
Дата 14.4.2007, 12:55 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Разберем по порядку.
error C2440: '=' : cannot convert from 'char *' to 'char'
Означает не могу преобразовать указатель на char к char.
Оно и понятно, ведь str[0] есть ни что иное как 
char (*) [10], т.е указатель на массив из 10-ти элементов char.
Разадресуя его мы получим его первый элемент, тип которого будет char.
2-я часть выражения m_EFname.GetBuffer( возвращает указатель на char. Кстати указание аргумента в функции GetBuffer означает желание изменить размер буфера - урезать или расширить. Если вы хотели просто получить адрест C-cтроки объекта CString, то надо для старых mfc (vs6.0) писать GetBuffer(0), для новых (vs8.0) GetBuffer(). т.е вообще опускать аргумент. 
Получаем просьбу присвоить char = char *. 
Но ваша пробелема не решится даже если типы и соответствовали,  т.е вы написали str[0]=m_EFname.GetBuffer(.
Было бы "lvalue required". Дело в том что в с операция = не может быть применена к типу data_type [N], т.е массиву. То что вы хотите можно сделать с помощью функции strcpy().
Ну и напоследок хочу сказать, что я давно пользуюсь CString и не помню чтобы возникала необходимость перегонять ее содержимое в chаr *.
Вам зачем это нужно?

Добавлено через 12 минут и 8 секунд
Цитата(Dov @  14.4.2007,  12:08 Найти цитируемый пост)
код C++    
CString  m_EFname="qwerty";    
char str[2][10];    
char* p = str[0];    
p = m_EFname.GetBuffer(m_EFname.GetLength());

Есть! я разобрался как цитировать конкретного человека.

Точно от вчерашнего. Вся полезная работа твоего примера сводится к изменению значения переменной p. 
Человек же хочет скопировать содержимое книги "Война и Мир", что можно сделать как верно заметил 
Greeen,  сишной функцией strcpy().

PM MAIL   Вверх
denis2105
Дата 14.4.2007, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



все разобрался
strcpy_s(str[0],m_EFname);

Добавлено через 2 минуты и 3 секунды
Вам зачем это нужно?

Так просто=))
PM MAIL   Вверх
zkv
Дата 14.4.2007, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(dizzy1984 @  14.4.2007,  12:55 Найти цитируемый пост)
2-я часть выражения m_EFname.GetBuffer( возвращает указатель на char

не всегда  smile, это может быть и указатель на wchar smile, причем по этому коду нельзя сказать какой именно тип указателя вернется. Корректный вариант у Greeen.

denis2105, а что такое strcpy_s?

Это сообщение отредактировал(а) zkv - 14.4.2007, 13:21
PM MAIL   Вверх
denis2105
Дата 14.4.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



strcpy_s тоже что и strcpy но с какой-то защитой буфера.
MVS 2005 ругается на strcpy, мол это функция морально устарела.

PM MAIL   Вверх
dizzy1984
Дата 14.4.2007, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(zkv @  14.4.2007,  13:18 Найти цитируемый пост)
 а что такое strcpy_s?

_s означает secured, т.е безопасный. Такие функции осуществляют проверку длины строки  для защита от взлома.

Цитата(zkv @  14.4.2007,  13:18 Найти цитируемый пост)
Цитата(dizzy1984 @  14.4.2007,  12:55 )    
2-я часть выражения m_EFname.GetBuffer( возвращает указатель на char    

не всегда  ,

не всегда  smile 

Цитата(zkv @  14.4.2007,  13:18 Найти цитируемый пост)
причем по этому коду нельзя сказать какой именно тип указателя вернется

Формально нет, но используя здравый смысл. smile 
В коде зашита нерасшеренная строка "qwerty". Косвенно на отсутствие юникода в программе наводит и использование char вместо TCHAR.

Цитата(zkv @  14.4.2007,  13:18 Найти цитируемый пост)
Корректный вариант у Greeen


Greeen, решает, это так  smile 

PM MAIL   Вверх
Greeen
Дата 14.4.2007, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(dizzy1984 @  14.4.2007,  14:57 Найти цитируемый пост)
Greeen, решает

 smile 


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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