![]() |
|
|
![]()
|
|
| mrTeapoт |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 5.6.2007 Репутация: нет Всего: нет |
Добрый день, господа сионисты.
У меня ситуация,которую вы, наверное, сочтете тривиальной. Я пытаюсь накарябать утилитку в чистом С без плюсов. При передаче строки в качестве параметра в функцию void MultSlashes( char** Str ); char ResFileName[512]; ....... MultSlashes( (char**)&ResFileName ); эта функция не может прочитать *Str ("Error:expression cannot be evaluated", said QuickWatch). Считает, что строка пустая. Соответственно if( NULL!=strchr(*Str, '\\') ) вызывает access violation. К моменту вызова MultSlashes ResFileName точно имеет осмысленное, не равное "" значение. У меня VC++ 6.0 Enterprise Edition; версия компилятора 12.00.8168. Непатченный. Поможите, люди добрые, и да продлит Аллах ваши дни. |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
к моменту вызова
strchr(*Str, '\\') нуль-символ в конце строки *Str имеется? В остальном вроде все нормально. Только не вижу, в вашем случае, смысла передавать char**, почему не char*? Это сообщение отредактировал(а) zkv - 5.6.2007, 13:44 |
|||
|
||||
| mrTeapoт |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 5.6.2007 Репутация: нет Всего: нет |
Терминальный нуль имеется, в натуре.
Я пробовал char*, но при этом обработанная в функции строка-параметр по возвращении не менялась. То есть, я понял так, что в случае char* в стек копируется строка, а не адрес? Или не так? |
|||
|
||||
| Fazil6 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 3 Всего: 60 |
должно быть так
вызов
что ты хочешь сделать конкретно сос воей строкой? ResFileName объявлен так, что он по определениию не может меняться. Меняться могут только элементы этого массива, а начало его (адрес первого элемента связанный с именем ResFileName ) нельзя изменить. При вызове MultSlashes( ResFileName ); создается локальная переменная типа char* и инициализируется адресом нулевого элемента. Строка в стек не копируется |
||||
|
|||||
| mrTeapoт |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 5.6.2007 Репутация: нет Всего: нет |
Да, прошу пардону. char* работает. Я ошибся при отладке.
Я понимаю, что ResFileName можно изменять только поэлементно. Функция писала в него, используя strcpy. Любопытно, однако, было бы узнать, что это было (в смысле с char** ). Ну да ладно. Всем спасибо. ЗЫ: Админу удачи с новым серваком. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |