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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.65
_or_75
-1 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 244
#1

[c++] fgets не могу понять почему это не работает - C++

24.08.2012, 23:14. Просмотров 2478. Ответов 28
Метки нет (Все метки)

Вообщем на диске C:\ лежит 3 файла

1 Файл test.txt
2 Файл 1.dll
3 Файл 2.dll

в test.txt записано:
1.dll
2.dll

Суть такова: считать с test.txt 2 строчки и вывести из указанных dll импортированную переменную version


Вот так не работает

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <conio.h>
#include <Windows.h>
 
using namespace std;
 
inline void LOADDLL(char* FILE)
{
    int* ver;
    string (*Hud)();
    HMODULE hLib = LoadLibrary(FILE);
    (FARPROC &)ver = GetProcAddress(hLib,"version");
    (FARPROC &)Hud = GetProcAddress(hLib,"Hud");
    cout << *ver;
}
void main()
{
    FILE *DFILE;
    DFILE = fopen("C:\\test.txt","r");
    char dll[30] = "C:\\";
    char buff[30] = "";
    while(!feof(DFILE))
    {
        fgets(buff,5,DFILE);
        strcat(dll,buff);
        LOADDLL(dll);
    }
    fclose(DFILE);
    getch();
}
вот так работает но выводит только у 1.dll и то если в test.txt записано 1.dll

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.....
void main()
{
    FILE *DFILE;
    DFILE = fopen("C:\\test.txt","r");
    char dll[30] = "C:\\";
    char buff[30] = "";
    while(!feof(DFILE))
    {
        fgets(buff,5,DFILE);
        strcat(dll,buff);
    }
    LOADDLL(dll);
    fclose(DFILE);
    getch();
}
а чем проблема??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2012, 23:14     [c++] fgets не могу понять почему это не работает
Посмотрите здесь:

Не могу понять почему не работает - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; const int arrSize = 15; int main() { string Phone; ...

Не могу понять почему не работает - C++
#include &quot;stdio.h&quot; #include &quot;math.h&quot; #include &quot;conio.h&quot; #define E 1e-6 int main() { float x,y,a; int n; ...

не могу понять почему не работает - C++
Пожалуйста ,помоги,найти ошибку... услвие задачи Подсчитать количество вхождений букв и слов в тексте #include&lt;fstream.h&gt; ...

Не могу понять почему не работает программа - C++
int f,x,a,b,c; cin&gt;&gt;x; if (x&gt;0) {f=pow(-x,4); cout&lt;&lt;f;} else {f=x+92; cout&lt;&lt;f;} if (x==0) {f=0;

не могу понять почему не работает программа - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;clocale&gt; #include &lt;cmath&gt; using namespace std; int main () { setlocale...

Не могу понять, почему программа неправильно работает! - C++
Изучаю С++ по Страуструпу Б. - Программирование. Принципы и практика использования C++. Есть задание: 9. Вычислите сумму введенных...

Ребятки,выручайте,не могу понять почему не работает - C++
В общем дали лабу на линейный алгоритм или ещё как то,а я не был на той паре когда это г... скидывали.в общем вот это- надо сделать в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
25.08.2012, 03:34     [c++] fgets не могу понять почему это не работает #21
_or_75, Читаете не правильно,минут через 10 - 30 напишу код,сейчас занят малень )

Добавлено через 36 минут
попробуйте
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <stdio.h>
#include <stdlib.h>
#include <clocale>
#include <typeinfo>
 
#define _CRT_SECURE_NO_WARNINGS
 
inline void LOADDLL(char* f)
{
    int* ver;
    string (*Hud)();
    HMODULE hLib = LoadLibrary(f);
    (FARPROC &)ver = GetProcAddress(hLib,"version");
    (FARPROC &)Hud = GetProcAddress(hLib,"Hud");
    cout << *ver;
}
 
inline void ReadDlls()
{
    FILE *f = nullptr;
        
            if((f = fopen("D:\\12.txt","r")) != NULL)
            {
                char buffDll[30] = "";
                char buffFile[30] = "";
                memset(buffFile,'\0',30);
                const char disk[] = "D:\\";
 
                while (!feof(f))
 
                    {
                    fscanf(f,"%s",buffFile);
                    strcat(buffDll,disk);
                    strcat(buffDll,buffFile);
                    LOADDLL(buffDll);//
                    memset(buffDll,'\0',30);
                    }
            }
            else
            {
                perror("Dll files");
            }
 
    fclose(f);
 
}
 
int main()
{
    setlocale(LC_ALL,".1251");
        ReadDlls();
 
    
 
    
 
 
 
    system("PAUSE");
    return 0;
}
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2012, 03:44     [c++] fgets не могу понять почему это не работает #22
xADMIRALx, а в чём чтение неправильное. Судя по скринам с отладчиком, в 9 посте, путь к dll в TEST правильно прописывается.
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
25.08.2012, 04:00     [c++] fgets не могу понять почему это не работает #23
alsav22, Посмотрите еще раз внимательно на код _or_75
и проследите за переменной dll,она забивается шлаками после 1 прохода,не зря у меня в коде const disk
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2012, 06:27     [c++] fgets не могу понять почему это не работает #24
Наверное, из-за того, что fgets() считывает '\n'. В последней строке этот символ отсутствует.

Добавлено через 3 минуты
alsav22, Посмотрите еще раз внимательно на код _or_75
Я не про его код из 1 поста, он уже изменён - 6 пост [c++] fgets не могу понять почему это не работает И скрины с отладчиком посмотрите в 9 посте [c++] fgets не могу понять почему это не работает

Добавлено через 11 минут
Я бы это код так написал:
Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
using namespace std;
 
inline void LOADDLL(const char* TEST)
{
    int* ver;
    string (*Hud)();
    HMODULE hLib = LoadLibrary(TEST);
    (FARPROC &)ver = GetProcAddress(hLib,"version");
    (FARPROC &)Hud = GetProcAddress(hLib,"Hud");
    cout << *ver << endl;
}
 
 
int main()
{
    
    fstream fopen("C:\\test.txt");
    if (!fopen.is_open()) cout << "Error!" << endl;
    
    string str = "C:\\";
    
    while (!fopen.eof())
    {
        string dll;
        string temp;
        
        getline(fopen, temp);
        
        dll = str + temp;
        
        LOADDLL(dll.c_str());
    } 
    
    fopen.close();
    
    system("pause");
    return 0;
}
_or_75
-1 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 244
25.08.2012, 13:13  [ТС]     [c++] fgets не могу понять почему это не работает #25
Цитата Сообщение от alsav22 Посмотреть сообщение
Наверное, из-за того, что fgets() считывает '\n'. В последней строке этот символ отсутствует.

Добавлено через 3 минуты

Я не про его код из 1 поста, он уже изменён - 6 пост [c++] fgets не могу понять почему это не работает И скрины с отладчиком посмотрите в 9 посте [c++] fgets не могу понять почему это не работает

Добавлено через 11 минут
Я бы это код так написал:
Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
using namespace std;
 
inline void LOADDLL(const char* TEST)
{
    int* ver;
    string (*Hud)();
    HMODULE hLib = LoadLibrary(TEST);
    (FARPROC &)ver = GetProcAddress(hLib,"version");
    (FARPROC &)Hud = GetProcAddress(hLib,"Hud");
    cout << *ver << endl;
}
 
 
int main()
{
    
    fstream fopen("C:\\test.txt");
    if (!fopen.is_open()) cout << "Error!" << endl;
    
    string str = "C:\\";
    
    while (!fopen.eof())
    {
        string dll;
        string temp;
        
        getline(fopen, temp);
        
        dll = str + temp;
        
        LOADDLL(dll.c_str());
    } 
    
    fopen.close();
    
    system("pause");
    return 0;
}
я так понел fgets будет считывать только последнию строку файла, а первые просто пропускать
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2012, 13:22     [c++] fgets не могу понять почему это не работает #26
Цитата Сообщение от _or_75 Посмотреть сообщение
я так понел fgets будет считывать только последнию строку файла, а первые просто пропускать
Разве? Вы же выводили, что она считывает. А мой код или xADMIRALx работает? Ваши .dll для проверки выложили бы.
_or_75
-1 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 244
25.08.2012, 13:25  [ТС]     [c++] fgets не могу понять почему это не работает #27
Цитата Сообщение от alsav22 Посмотреть сообщение
Разве? Вы же выводили, что она считывает. А мой код работает?
твой работает, спасибо.

fgets считывает, но LOADDLL берет HANDLE только последней строки test.txt, а при fstream не знаю, он просто работает
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2012, 13:45     [c++] fgets не могу понять почему это не работает #28

Не по теме:

.dll засекречены?

Дело, мне кажется, в следующем. fgets() (в отличие от getline()) считывает из потока символ '\n'. Получается, что строка, которая передаётся в LOADDLL(), заканчивается не '\0', а '\n'. Если с помощью cout << выводить то, что предаётся в LOADDLL(), всё выглядит нормально. Но cout << нормально выведет строку, если она и на '\n' заканчивается, и на '\0'. Как в функции LOADDLL() эта строка должна выглядеть, чтобы она нормально обработалась, я не знаю. Но отличие последней строки в файле от других в том, что там в конце нет '\n'. Проверить это всё точно я не могу без .dll. Можете провести такой эксперимент. В файле, поставить курсор на конец последней строки и нажать Enter. В конце последней строки теперь будет '\n'. Сохранить файл с изменениями. Проверить тот вариант кода, который нормально работал только с последней строкой. Если перестанет, то причина в этом.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2012, 13:49     [c++] fgets не могу понять почему это не работает
Еще ссылки по теме:

не могу понять почему не работает std::sort() - C++
#include &lt;vector&gt; #include &lt;algorithm&gt; using namespace std; class T{ public: T(int a_, int b_) : a(a_), b(b_){}...

Не могу понять почему программа работает не правильно! - C++
Задание: Программа находит в строке 1 символ который не входит во 2 заданную строку. Помогите исправить ошибку. ...

Не могу понять почему не работает прога(структуры) - C++
Вот стрепал код. структура содержит результаты сессии( как раз актуально), надо ввести данные в структуру, фамилии студентов и оценки по...

Не могу понять почему у меня не работает sound,delay,nosound.... - C++
Не могу понять почему у меня не работает sound,delay,nosound.... Пишет ошибку Unitms.cpp(7): E2268 Call to undefined function 'sound' ...

Эксперты! Одномерный массив неповторяющихся чисел не могу понять почему криво работает - C++
Задание: Нужно вывести массив из случайных чисел. Размер массива 8. Случайные числа от 1 до 8. Числа не должны повторяться. #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
_or_75
-1 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 244
25.08.2012, 13:49  [ТС]     [c++] fgets не могу понять почему это не работает #29
Цитата Сообщение от alsav22 Посмотреть сообщение

Не по теме:

.dll засекречены?

Дело, мне кажется, в следующем. fgets() (в отличие от getline()) считывает из потока символ '\n'. Получается, что строка, которая передаётся в LOADDLL(), заканчивается не '\0', а '\n'. Если с помощью cout << выводить то, что предаётся в LOADDLL(), всё выглядит нормально. Но cout << нормально выведет строку, если она и на '\n' заканчивается, и на '\0'. Как в функции LOADDLL() эта строка должна выглядеть, чтобы она нормально обработалась, я не знаю. Но отличие последней строки в файле от других в том, что там в конце нет '\n'. Проверить это всё точно я не могу без .dll. Можете провести такой эксперимент. В файле, поставить курсор на конец последней строки и нажать Enter. В конце последней строки теперь будет '\n'. Сохранить файл с изменениями. Проверить тот вариант кода, который нормально работал только с последней строкой. Если перестанет, то причина в этом.
я все равно об этом и думал
Yandex
Объявления
25.08.2012, 13:49     [c++] fgets не могу понять почему это не работает
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru