Форум программистов, компьютерный форум CyberForum.ru

Поиск с консоли - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Насчёт функции memcpy() http://www.cyberforum.ru/cpp-beginners/thread53416.html
Начинаяю использовать эту функцию.Её синтаксис: void memcpy(void *to, const void *from, size_t count); Вопрос_1: Что такое size_t ? И вообще,зачем указателям тип воид? Они что,что-то вовращают?)) В учебнике пока такого не встречал,а функция нужна( ЗЫ: Нужно скопировать один числовой непустой массив в другой числовой массив...как это сделать не догоню уже полчаса.......
C++ Ввести три числа и проверить, возможно ли из них составить арифметическую прогрессию ввести три числа и проверить возможно ли с них составить арифметическую прогрессию http://www.cyberforum.ru/cpp-beginners/thread53408.html
Передача параметров по ссылке C++
У кого есть рабочий вариант сего чуда ? (К примеру,функции квадратного корня).В учебнике не работает.
Присвоение типов в С++ C++
Как присвоить елементам массива mas_a елементы строки String.Массив имеет тип int,а String char?
C++ Вопрос по выносу кода в отдельный файл http://www.cyberforum.ru/cpp-beginners/thread53363.html
Вот если писать в С программу, очень много когда можно запутаться ... Можно ли как то вынести часть кода в файл. (именно файл, база не нужна) Например если есть большой массив, можно ли его вынести в файл и от туда считывать? если можно покажите пожалуйста как.
C++ Х в квадрате каким образом мжно делать что бы Х выводился на экарн со степенем? подробнее

Показать сообщение отдельно
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,423
11.11.2009, 07:38     Поиск с консоли
Друзья!
Если кто пользуется вышеприведёнными прогами быстренько взяли и поправили исходник.
Там ошибка есть, что у Юры, что у меня, я щас только нашёл.
Вот эту строку
C++
1
sPath[strlen(sPath) - strlen(strstr(sPath,"*.*"))] = '\0'
Надо выполнять не по условию, а НЕЗАВИСМО ВЫПОЛНЯЕТСЯ УСЛОВИЕ ИЛИ НЕТ!
Если пропишем после if (как делали до сего момента), то тогда, если вдруг натыкаемся на
системную директорию или файл, то FindFirstFile возвращает -1. Следовательно, всё,
что выполнняется по условию (hFile!=INVALID_HANDLE_VALUE) не выполнится и в частности,
не будет поставлен конец строки!
А это значит, что по выходу из рекурсивной функции GetFileList в том месте, где мы
восстанавливаем длину, она будет восстановлена неправильно.

Я наткнулся на директорию System Volume Information, не обработал её таким образом,
а потом , когда восстанавливал путь, он у меня восстанвился не как C:\ а как
C:\Sys!

Прибавились эти злополучные три байта, которые я не "отсёк" , не поставил ноль сюда
С:\System Volume Informationвот в это место надо ставить ноль!\*.*

Поэтому поправьте так:

C++
1
2
3
4
5
6
7
8
9
10
11
void GetFileList(LPTSTR sPath, LPTSTR sExt, LPTSTR sEXT) {
 WIN32_FIND_DATA pFILEDATA;
 HANDLE hFile = FindFirstFile(strcat(sPath,"\\*.*"),&pFILEDATA);
 
 //!!!!!!!!!!!!!!!!!!!!!!
 sPath[strlen(sPath) - strlen(strstr(sPath,"*.*"))] = '\0';
 //!!!!!!!!!!!!!!!!!!!!!!!
 
 if (hFile!=INVALID_HANDLE_VALUE)    {
  char * chBuf;
  do {
Вроде всё.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru