Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Параметр - указатель на строку, Функция считает, что она пустая 
V
    Опции темы
mrTeapoт
Дата 5.6.2007, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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. Непатченный.
    Поможите, люди добрые, и да продлит Аллах ваши дни.

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



****


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

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



к моменту вызова
strchr(*Str, '\\') 
нуль-символ в конце строки *Str имеется? 

В остальном вроде все нормально.

Только не вижу, в вашем случае, смысла передавать char**, почему не char*?

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


Новичок



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

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



 Терминальный нуль имеется, в натуре.
Я пробовал char*, но при этом обработанная в функции строка-параметр по возвращении не менялась. То есть, я понял так, что в случае char* в стек копируется строка, а не адрес? Или не так?
PM MAIL   Вверх
Fazil6
Дата 5.6.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



должно быть так
Код

    void MultSlashes( char* Str );  
    char ResFileName[512];


вызов
Код

 MultSlashes( ResFileName );

Цитата(mrTeapoт @  5.6.2007,  14:50 Найти цитируемый пост)
Я пробовал char*, но при этом обработанная в функции строка-параметр по возвращении не менялась. То есть, я понял так, что в случае char* в стек копируется строка, а не адрес? Или не так?

что ты хочешь сделать конкретно сос воей строкой?

ResFileName объявлен так, что он по определениию не может меняться. Меняться могут только элементы этого массива, а начало его (адрес первого элемента связанный с именем ResFileName ) нельзя изменить. При вызове MultSlashes( ResFileName ); создается локальная переменная типа char* и инициализируется адресом нулевого элемента. Строка в стек не копируется

PM MAIL   Вверх
mrTeapoт
Дата 6.6.2007, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 Да, прошу пардону. char* работает.  Я ошибся при отладке.
Я понимаю, что ResFileName можно изменять только поэлементно. Функция писала в него, используя strcpy. Любопытно, однако, было бы узнать, что это было (в смысле с char** ). Ну да ладно. Всем спасибо.

ЗЫ: Админу удачи с новым серваком.


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


 




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


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

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