Вопрос № 171047: Здравствуйте. Есть функция которая стирает файлы из определенной директории.Путь к этим файлам прописывается вручную с помощью printf, scanf и должен сохраняться в текстовый файл.Как я понимаю сам путь можно записать только в переменную типа char*...
Вопрос № 171047:
Здравствуйте. Есть функция которая стирает файлы из определенной директории.Путь к этим файлам прописывается вручную с помощью printf, scanf и должен сохраняться в текстовый файл.Как я понимаю сам путь можно записать только в переменную типа char*, тогда в этой переменной будут находиться все символы пути, которые вводятся вручную.Вопрос вот в чем:по-моему мнению такой код должен работать(записывать в файл log.txt путь, который прописывается вручную), но при компиляции вылетает с access violation .Что тут надо изменить чтобы работало?
Отвечает Хватов Сергей, Практикант :
Здравствуйте, Александр Большаков.
Такое работать не будет. char* - это указатель, который должен на что-то указывать. В данном случае - на символьную строку достаточной длины. Примерно так: char path[100]; ... scanf("%99s",path); Здесь компилятор имя массива без индексного выражения неявно преобразует в указатель на этот массивЮ а данные будут записаны в сам массив. Размер поля предотващает возможне переполнение массива, если строка слишком длинная. Только строка будет прочитана
до первого пробела (который в имени файла вполне может оказаться). В любом случае - символы конца строки останутся во вводе и будут считаны следующей операцией. Да и вообще использовать scanf - это нарываться на проблемы. Лучше использовать fgets(path, 100, stdin), только тогда конец строки придётся удалять вручную.
Ответ отправил: Хватов Сергей, Практикант
Ответ отправлен: 04.08.2009, 15:48
Оценка ответа: 5
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 252926
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает Зарубин Дмитрий Сергеевич, 3-й класс :
Здравствуйте, Александр Большаков! Вам необходимо инициализировать переменную. C++: char *path=new char[MAX_PATH];
C: char *path=(char *)malloc(MAX_PATH);
Не забудьте добавить fflush(stdin); после scanf, для обновления потока ввода. И не забудьте деинициализировать переменную (освободить память) C++: delete path;
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.