Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 1 / 1
Регистрация: 18.02.2012
Сообщений: 244

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

24.08.2012, 23:14. Показов 5207. Ответов 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();
}
а чем проблема??
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.08.2012, 23:14
Ответы с готовыми решениями:

Не могу понять, что это за реализация ORM и как это работает
Есть проект на C#, есть база данных MSSQL, есть код, который позволяет мне добавлять и удалять данные из базы данных (без создания и...

Не могу понять, как это работает
Привет друзья. Хочу разобраться, как определяется связь между положением курсора и типом &quot;TSelectionDansLigne&quot;. Механизм...

Не могу понять как это работает?
.positioner:after { content:''; display: table; clear: both; } Кто может объяснить как работает эта програма.Не могу...

28
 Аватар для xADMIRALx
70 / 64 / 5
Регистрация: 09.06.2012
Сообщений: 291
25.08.2012, 03:34
Студворк — интернет-сервис помощи студентам
_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;
}
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2012, 03:44
xADMIRALx, а в чём чтение неправильное. Судя по скринам с отладчиком, в 9 посте, путь к dll в TEST правильно прописывается.
0
 Аватар для xADMIRALx
70 / 64 / 5
Регистрация: 09.06.2012
Сообщений: 291
25.08.2012, 04:00
alsav22, Посмотрите еще раз внимательно на код _or_75
и проследите за переменной dll,она забивается шлаками после 1 прохода,не зря у меня в коде const disk
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2012, 06:27
Наверное, из-за того, что fgets() считывает '\n'. В последней строке этот символ отсутствует.

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

Добавлено через 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;
}
1
0 / 1 / 1
Регистрация: 18.02.2012
Сообщений: 244
25.08.2012, 13:13  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Наверное, из-за того, что fgets() считывает '\n'. В последней строке этот символ отсутствует.

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

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

Добавлено через 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 будет считывать только последнию строку файла, а первые просто пропускать
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2012, 13:22
Цитата Сообщение от _or_75 Посмотреть сообщение
я так понел fgets будет считывать только последнию строку файла, а первые просто пропускать
Разве? Вы же выводили, что она считывает. А мой код или xADMIRALx работает? Ваши .dll для проверки выложили бы.
0
0 / 1 / 1
Регистрация: 18.02.2012
Сообщений: 244
25.08.2012, 13:25  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Разве? Вы же выводили, что она считывает. А мой код работает?
твой работает, спасибо.

fgets считывает, но LOADDLL берет HANDLE только последней строки test.txt, а при fstream не знаю, он просто работает
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2012, 13:45

Не по теме:

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

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

Не по теме:

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

Дело, мне кажется, в следующем. fgets() (в отличие от getline()) считывает из потока символ '\n'. Получается, что строка, которая передаётся в LOADDLL(), заканчивается не '\0', а '\n'. Если с помощью cout << выводить то, что предаётся в LOADDLL(), всё выглядит нормально. Но cout << нормально выведет строку, если она и на '\n' заканчивается, и на '\0'. Как в функции LOADDLL() эта строка должна выглядеть, чтобы она нормально обработалась, я не знаю. Но отличие последней строки в файле от других в том, что там в конце нет '\n'. Проверить это всё точно я не могу без .dll. Можете провести такой эксперимент. В файле, поставить курсор на конец последней строки и нажать Enter. В конце последней строки теперь будет '\n'. Сохранить файл с изменениями. Проверить тот вариант кода, который нормально работал только с последней строкой. Если перестанет, то причина в этом.
я все равно об этом и думал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.08.2012, 13:49

Не могу понять, почему программа работает неправильно( Знаю, что где-то ошибки, но не могу найти
{Ввести последовательность натуральных чисел Aj j=1...n (n&lt;=1000). Упорядочить последовательность по неубыванию наименььшей цифры...

Не работает изменение, не могу понять почему, Update не работает, ошибку выдает
Помогите, изменение с помощью button string u = заявкиDataGridView.CurrentRow.Cells.Value.ToString(); ...

Не могу понять почему не работает (или правильно не работает)
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #define N 5 #define M 3 void main() { int a; int i,j; cout&lt;&lt;&quot;nachalnya...

Не могу понять почему не работает
Суть задания проста. Написать программу, которая сравнивает элементы второго массива с первым и если они равны выводит. Пример Ввод: ...

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


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru