Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

_Ayl_
Статус: Студент
Рейтинг: 960
∙ повысить рейтинг >>
Micren
Статус: Бакалавр
Рейтинг: 584
∙ повысить рейтинг >>
Matrix
Статус: 5-й класс
Рейтинг: 326
∙ повысить рейтинг >>

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Номер выпуска:1368
Дата выхода:09.08.2009, 14:35
Администратор рассылки:Dr_Andrew, Модератор
Подписчиков / экспертов:636 / 157
Вопросов / ответов:1 / 2
IRC-канал по теме:#C

Вопрос № 171047: Здравствуйте. Есть функция которая стирает файлы из определенной директории.Путь к этим файлам прописывается вручную с помощью printf, scanf и должен сохраняться в текстовый файл.Как я понимаю сам путь можно записать только в переменную типа char*...



Вопрос № 171047:

Здравствуйте.
Есть функция которая стирает файлы из определенной директории.Путь к этим файлам прописывается вручную с помощью printf, scanf и должен сохраняться в текстовый файл.Как я понимаю сам путь можно записать только в переменную типа char*, тогда в этой переменной будут находиться все символы пути, которые вводятся вручную.Вопрос вот в чем:по-моему мнению такой код должен работать(записывать в файл log.txt путь, который прописывается вручную), но при компиляции вылетает с access violation .Что тут надо изменить чтобы работало?

Отправлен: 04.08.2009, 14:13
Вопрос задал: Александр Большаков, Посетитель
Всего ответов: 2
Страница вопроса >>


Отвечает Хватов Сергей, Практикант :
Здравствуйте, Александр Большаков.

Такое работать не будет. char* - это указатель, который должен на что-то указывать. В данном случае - на символьную строку достаточной длины. Примерно так:
char path[100];
...
scanf("%99s",path);
Здесь компилятор имя массива без индексного выражения неявно преобразует в указатель на этот массивЮ а данные будут записаны в сам массив. Размер поля предотващает возможне переполнение массива, если строка слишком длинная.
Только строка будет прочитана до первого пробела (который в имени файла вполне может оказаться). В любом случае - символы конца строки останутся во вводе и будут считаны следующей операцией. Да и вообще использовать scanf - это нарываться на проблемы. Лучше использовать fgets(path, 100, stdin), только тогда конец строки придётся удалять вручную.

Ответ отправил: Хватов Сергей, Практикант
Ответ отправлен: 04.08.2009, 15:48

Оценка ответа: 5

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 252926 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Зарубин Дмитрий Сергеевич, 3-й класс :
    Здравствуйте, Александр Большаков!
    Вам необходимо инициализировать переменную.
    C++:
    char *path=new char[MAX_PATH];

    C:
    char *path=(char *)malloc(MAX_PATH);

    Не забудьте добавить fflush(stdin); после scanf, для обновления потока ввода.
    И не забудьте деинициализировать переменную (освободить память)
    C++:
    delete path;

    C:
    free(path);

    Ответ отправил: Зарубин Дмитрий Сергеевич, 3-й класс
    Ответ отправлен: 04.08.2009, 21:13

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 252943 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск >>
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки >>

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.6 от 21.07.2009

    В избранное