Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83

Исполняемый exe-файл и компилятор дают разные результаты

15.03.2015, 22:22. Показов 1459. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему при запуске в компиляторе программа дает один результат, а exe-файле совсем другое. Первый раз с таким сталкиваюсь.
Код программы:
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 <stdio.h>
#include <errno.h>
#include <stdlib.h>
#define BUF_SIZE 256
#include <clocale> //подключаем для использования setlocale
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "");
    FILE *in_file, *out_file;
    char rec [BUF_SIZE];
    size_t bytes_in, bytes_out;
    if (argc != 3) {
        printf("Использование: cpC файл1 файл2\n");
        system("pause");
        return 1;
    }
    in_file = fopen(argv [1], "rb");
    if (in_file == NULL) {
        perror(argv[1]);
        system("pause");
        return 2;
    }
    out_file = fopen(argv[2], "wb");
    if (out_file == NULL) {
        perror(argv[2]);
        system("pause");
        return 3;
    }
 
    while ((bytes_in = fread(rec,1,BUF_SIZE,in_file))>0) {
        bytes_out = fwrite (rec,1,bytes_in, out_file);
        if (bytes_out != bytes_in) {
            perror("Неустранимая ошибка записи.");
            system("pause");
            return 4;
        }
    }
    fclose(in_file);
    fclose(out_file);
    printf("Файл file.txt успешно скопирован!\n");
    system("pause");
    return 0;
}
Миниатюры
Исполняемый exe-файл и компилятор дают разные результаты   Исполняемый exe-файл и компилятор дают разные результаты   Исполняемый exe-файл и компилятор дают разные результаты  

0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.03.2015, 22:22
Ответы с готовыми решениями:

Регулярные выражения и исполняемый файл - exe для работы с интернетом
Регулярные выражения и исполняемый файл - exe для работы с интернетом В идеале Нужен аналог Perl или PHP То есть: use COOLHTML; ...

Как запустить исполняемый файл *.exe написанный на С++ Builder на другом компе
Проблема заключается в следующем. Написал программу на С++, провел компиляцию, создал исполняемый файл, но его размер довольно мал для...

Как создать программу в С++, чтобы его можно было запускать как исполняемый .exe файл?
Здравствуйте! Собственно вся суть сабжа содержится содержится в сабже :) допустим: // ConsoleApplication3.cpp: определяет точку...

19
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.03.2015, 22:26
Цитата Сообщение от Lenchik_19 Посмотреть сообщение
Почему при запуске в компиляторе программа дает один результат, а exe-файле совсем другое.
Потому что поведение вышей программы зависит от аргументов, которые были переданны программе при запуске:

При запуске из ИДЕ аргументы указаны одни (возможно они вообще не указаны)
При запуске из консоли - другие.

Если количество аргументов, которое было переданно программе при запуске не равно 3,
то она у вас вывалится с сообщением:
Использование: cpC файл1 файл2
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
15.03.2015, 22:30  [ТС]
hoggy, ну так подскажите как это исправить, я просто с аргументами первый раз работаю.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.03.2015, 22:41
Цитата Сообщение от Lenchik_19 Посмотреть сообщение
ну так подскажите как это исправить, я просто с аргументами первый раз работаю.
Ваша программа хочет запускаться из консоли.
При этом она хочет запускаться с двумя аргументами: имена файлов.

Судя по скринам, из под ИДЕ она у вас корректно запускается.

Что бы оно и из консоли тоже запускалось корректно, то вы должны запускать её из консоли, указав те же аргументы, что пробиты в настройках ИДЕ.

В вижуал студии в свойствах проекта есть возможность указать с какими аргументами нужно запускать приложения из под ИДЕ.
Там они у вас уже указанны.

Вам нужно лишь подсмотреть какие именно, и запускать из консоли с точно такими же.
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
15.03.2015, 22:45  [ТС]
Где ещё в настройках нужно добавить аргументы, кроме тех, которые я уже указала?

Добавлено через 2 минуты
hoggy, что такое ИДЕ?

Добавлено через 1 минуту
hoggy, у меня с компилятора работает правильно, а если просто запускаю exe-файл, то тогда выдают ошибку
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.03.2015, 22:46
Цитата Сообщение от Lenchik_19 Посмотреть сообщение
Где ещё в настройках нужно добавить аргументы, кроме тех, которые я уже указала?
Вы не поняли. Со студией все в порядке.

Когда вы отдельно от студии запускаете вашу программу,
вы должны передать ей два аргумента - имена файлов.

При запуске вы можете указать те же самые имена, что указаны в настройках проекта.

Добавлено через 48 секунд
Цитата Сообщение от Lenchik_19 Посмотреть сообщение
что такое ИДЕ?
ИДЕ - интегрированная среда разработки. В вашем случае она называется Visual Studio
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
15.03.2015, 22:47  [ТС]
hoggy, а как это сделать?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.03.2015, 22:49
Цитата Сообщение от Lenchik_19 Посмотреть сообщение
hoggy, а как это сделать?
Для начала посмотрите в настройках проекта с какими аргументами запускается приложение,
когда вы запускаете её из под ИДЕ.

И сообщите мне
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
15.03.2015, 22:52  [ТС]
hoggy,
Цитата Сообщение от hoggy Посмотреть сообщение
ИДЕ - интегрированная среда разработки. В вашем случае она называется Visual Studio
понятно)

Добавлено через 2 минуты
hoggy, в первом сообщении скриншот с аргументами команды: "C:\Users\Елена\Documents\Visual Studio 2010\Projects\laba_1\laba_1\Debug\file.t xt" "C:\Users\Елена\Documents\Visual Studio 2010\Projects\laba_1\laba_1\Debug\file_c opy.txt"
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.03.2015, 22:53
1. Выбрав проект в Обозревателе решения,
в меню Проект выберите команду Свойства.

2. Перейдите на вкладку Отладка.

3. Скопируйте все, что написанно в поле "Аргументы командной строки"

Добавлено через 46 секунд
Цитата Сообщение от Lenchik_19 Посмотреть сообщение
hoggy, в первом сообщении скриншот с аргументами команды: "C:\Users\Елена\Documents\Visual Studio 2010\Projects\laba_1\laba_1\Debug\file.t xt" "C:\Users\Елена\Documents\Visual Studio 2010\Projects\laba_1\laba_1\Debug\file_c opy.txt"
Ок.

Далее, сообщите точный путь к вашей программе.

Далее, запустите консоль.
Вот здесь показано, как это сделать:
http://www.windxp.com.ru/win7/articles19.htm
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
15.03.2015, 22:54  [ТС]
hoggy, к exe-файлу?
C:\Users\Елена\Documents\Visual Studio 2010\Projects\laba_1\laba_1\Debug
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.03.2015, 22:57
Теперь просто запустите консоль.

и напечатайте в ней:

cd C:\Users\Елена\Documents\Visual Studio 2010\Projects\laba_1\laba_1\Debug
laba_1.exe file.txt file_copy.txt
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
15.03.2015, 23:17  [ТС]
hoggy, ну консоль я запускать точно умею(

Добавлено через 4 минуты
hoggy, т.е., если я вас правильно поняла, то запустить я его могу только через консоль?

Добавлено через 14 минут
hoggy, спасибо
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.03.2015, 23:19
Цитата Сообщение от Lenchik_19 Посмотреть сообщение
т.е., если я вас правильно поняла, то запустить я его могу только через консоль?

Ваша программа - консольная.
Вы можете запустить её из консоли.

Но вы можете, например, написать батник который сделает запуск.
И тогда не придется вручную запускать консоль.

Или можно выполнить запуск изнутри другой программы.

Но в целом, консольные программы предназначены для запуска из консоли.
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
15.03.2015, 23:32  [ТС]
hoggy, просто проблема в том, что мне нужно, чтобы сам ехе-файл был рабочий. Есть программа таймер, которой тестируется время работы данного ехе-файла.

Добавлено через 1 минуту
А без него я не смогу этого сделать...
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.03.2015, 23:48
Цитата Сообщение от Lenchik_19 Посмотреть сообщение
hoggy, просто проблема в том, что мне нужно, чтобы сам ехе-файл был рабочий.
А она у вас вполне себе рабочая.

Давайте мы слегка подправим код, что бы программа не требовала аргументы в обязательном порядке.
И тогда, если вы запускаете программу без указания аргументов, она будет использовать значения по умолчанию:

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
62
63
64
include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#define BUF_SIZE 256
#include <clocale> //подключаем для использования setlocale
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "");
    FILE *in_file, *out_file;
    char rec [BUF_SIZE];
    size_t bytes_in, bytes_out;
    
    const char* filename1 = argc >1? argv [1] : "file.txt";
    const char* filename2 = argc >2? argv [2] : "file_copy.txt";
 
/*    
    if (argc != 3) {
        printf("Использование: cpC файл1 файл2\n");
        system("pause");
        return 1;
    }
    */
    
    if (argc != 3) {
        printf("Использованы значения по умолчанию: входящие данные: file.txt, выходные данные file_copy.txt\n");
    }
    
    
    //in_file = fopen(argv [1], "rb");
    
    in_file = fopen(filename1, "rb");
    if (in_file == NULL) {
        //perror(argv[1]);
        perror(filename1);
        system("pause");
        return 2;
    }
    
    
    //out_file = fopen(argv[2], "wb");
    out_file = fopen(filename2, "wb");
    
    
    if (out_file == NULL) {
        //perror(argv[2]);
        perror(filename2);
        system("pause");
        return 3;
    }
 
    while ((bytes_in = fread(rec,1,BUF_SIZE,in_file))>0) {
        bytes_out = fwrite (rec,1,bytes_in, out_file);
        if (bytes_out != bytes_in) {
            perror("Неустранимая ошибка записи.");
            system("pause");
            return 4;
        }
    }
    fclose(in_file);
    fclose(out_file);
    printf("Файл file.txt успешно скопирован!\n");
    system("pause");
    return 0;
}
0
30 / 30 / 9
Регистрация: 25.12.2014
Сообщений: 115
15.03.2015, 23:48
сделайте его без аргументов, с константными значениями к файлам, если нужна просто проверка на время работы
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
15.03.2015, 23:55  [ТС]
hoggy, та я понимаю, что можно так сделать, но было такое задание)
хотя...
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.03.2015, 23:57
Цитата Сообщение от Lenchik_19 Посмотреть сообщение
hoggy, та я понимаю, что можно так сделать, но было такое задание)
хотя...
Мы не нарушаем ваше задание.
Потому что программа по прежнему умеет принимать аргументы командной строки.

Просто теперь это не обязательно. Она может запускаться и с аргументами, и без аргументов.
Просто, если без аргументов, то имена файлов жестко прибиты в исходном коде.
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
16.03.2015, 00:06  [ТС]
hoggy, спасибо вам большое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.03.2015, 00:06
Помогаю со студенческими работами здесь

Компиляция программы в Qt в различных ОС дают разные результаты
Всем добрый день. Собственно в чем проблема. Имеется проект на Qt. Когда я его компилирую в Windows 7, компонент QWebView не отображает...

Открытие файлового потока. Ручная сборка и cmake(?) дают разные результаты
Здравствуйте. Никак не могу ответить себе на вопрос: что я делаю не так? Суть: есть такой кусок кода: string path =...

Два ОДИНАКОВЫХ ВЫЗОВА ФУНКЦИИ printf, идущие подряд, дают разные результаты
Друзья! foo = bar = filter (lambda x: True, foo) print(list(bar)) print(list(bar)) Выдаёт:

Href="javascript". Chrome и ИЕ8 дают разные результаты
&lt;a href=&quot;javascript: test('%d1%82-%e2%');&quot;&gt; function test(a) { alert(a); } хром и ИЕ8 дают разные результаты. хром в UTF...

Как отучить компилятор вставлять таймстампы в исполняемый файл?
Для примера возьмём Delphi 7. Если создать новый проект с пустой формой во главе (для красоты кинул на него button), и построить (build)...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru