![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Ка |
|
|||
|
Unregistered |
Есть фрагмент кода:
char Disks[NUM_DISKS]; ///.. SearchInDir((LPTSTR)Disks); } void SearchInDir(LPTSTR Dir) { struct _finddata_t c_file; long hFile; DWORD fAttrib; char* rslt; /* Find first .c file in current directory */ rslt=(char*)malloc(3); rslt=(char *)Dir[0];//это не правильно strcat(rslt,":\\*"); как мне получить первую букву Dirв переменную rslt? |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
А как насчет
*rslt=*Dir или rslt[0]=Dir[0] -------------------- Волны гасят ветер... |
|||
|
||||
| не получается |
|
|||
|
Unregistered |
не получается:
illegal indirection |
|||
|
||||
| TwoK |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 259 Регистрация: 25.3.2002 Репутация: нет Всего: нет |
Ты тут выделяешь 3 байта памяти, а затем хочешь присвоить значению этого указателя символ.
или
или
Вот. -------------------- Говорят, что население в стране все меньше и меньше. А народу по утрам в метро почему-то все больше и больше... |
||||||||
|
|||||||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: нет Всего: 10 |
А может написать так: rslt=(char)malloc(3); ? -------------------- С уважением, А. Фролов. |
|||
|
||||
| TwoK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 259 Регистрация: 25.3.2002 Репутация: нет Всего: нет |
Не, стоп. malloc() возвращает (void*). То есть указатель "никакого" типа на начало выделенного куска памяти. Соответственно, его (указатель) надо преобразовать к виду "указатель типа char", то есть (char*).
-------------------- Говорят, что население в стране все меньше и меньше. А народу по утрам в метро почему-то все больше и больше... |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Так вообще нельзя, негоже преобразовывать указатель к chаr, а уж если на то пошло, то красивее было бы так:
rlts=new char[3];
На какую это строчку такая штука вываливается? LPTSTR - это LongPointerToString, то есть 32-битный указатель. То есть обычно это просто псевдоним char*. Ну в крайнем случае, сделай так: rlts[0]=((char*)Dir)[0] или объяви rlts как LPTSTR. Хотя это уже извращение, и мне кажется что дело в другом. -------------------- Волны гасят ветер... |
|||
|
||||
| TwoK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 259 Регистрация: 25.3.2002 Репутация: нет Всего: нет |
Ты имел в виду (к char) или (к char*)? -------------------- Говорят, что население в стране все меньше и меньше. А народу по утрам в метро почему-то все больше и больше... |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Я имел ввиду вот эту строчку:
rslt=(char)malloc(3); -------------------- Волны гасят ветер... |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: нет Всего: 10 |
Ну да, то есть new -------------------- С уважением, А. Фролов. |
|||
|
||||
| Unregistered |
|
|||
|
Unregistered |
[/U][U][I][/I][/B][B][QUOTE][CODE]
|
|||
|
||||
| shedon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: 4 Всего: 11 |
Так нельзя ? -------------------- Programming is like sex: One mistake and you have to support it your lifetime |
|||
|
||||
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Мона, только чтоб strlen вернёт длину без нулевого байта, а без него строку использовать нельзя в стандартных функциях, то есть у тебя rslt на один символ короче Dir. И ещё если тебе нужен только первый символ, то и выделяй два байта (под символ и ноль).
|
|||
|
||||
| shedon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: 4 Всего: 11 |
RAN, всё верно!
Не знал, что strlen возвращает без нуля. А нафиг вообще надо было использовать маллоки и аллоки. Я ими вообще не когда не пользовался. -------------------- Programming is like sex: One mistake and you have to support it your lifetime |
|||
|
||||
| HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Ну вы блин даете!!!!
Разве функция strcat умеет выделять дополнительную память? куда вы влепите c - 1байт :\* - 3байта 0 -1байт итого 5байт? когда выделяешь память лучше выделить больше чем меньше поэтому при работе с файлами удобно использовать MAX_PATH теперь по поводу malloc : сколько форумов смотрел везде рекомендуют использовать new... и не говорите мне что это одно и то же сейчас не значит навсегда.... Стоило привести не только проблему частную но и описать более полно функцию которую нужно написать и возможно кто-нибудь представил бы готовое решение Что бы не разбираться с тем куском мусора который лежит в теле функции, привожу пример более простой: подстановка из строки конкретной буквы по ее номеру (от 1 и выше)
Кстати к автору вопроса : Если задачу уже решил хоть намекни, а то может мы тут зря заморачиваемся? Это сообщение отредактировал(а) HexoGenus - 22.7.2003, 12:55 --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
| shedon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: 4 Всего: 11 |
А ни кто этого и не говорил. -------------------- Programming is like sex: One mistake and you have to support it your lifetime |
|||
|
||||
| HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Ну да... зато все дружно выделяли 2 или 3 байта под строку размером в 5 байт
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
| shedon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: 4 Всего: 11 |
Сорри забыл про strcat, теперь понял.
HexoGenus, а разве можно так делать:
Я имею ввиду записывать 0 посреди строки, просто потом могут быть проблеммы, при копирование в другую переменную, он может отбросить всё, что после 0. -------------------- Programming is like sex: One mistake and you have to support it your lifetime |
|||
|
||||
| HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Ноль как раз и показывает место где заканчивается первая строка...
а функция strcat как раз и нужна что бы склеивать две строки каждая из которых заканчивается нулем... strcat начиная с места где ноль (поверх его) запишет вторую строку, и в результате из двух строк мы получим одну... (но всегда нужно заботится что бы первая строка была не полной то есть после ноль-символа в строке должно быть запасное место или будет выход за предел отведенной памяти, что очень чревато последствиями) И нуля в середине строки после всего этого точно не будет... если не веришь проверь работоспособность моего кода... Функция ShowMessage выводит текст как раз до нуль-символа... Как я себе представляю функцию strcat
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
| shedon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: 4 Всего: 11 |
Понятно.
-------------------- Programming is like sex: One mistake and you have to support it your lifetime |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |