Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: Abs62
Дата сообщения: 03.04.2006 21:26
JekaCh
В DOS было правильно. А Win98 - это тоже Win32. Читай про разделение адресных пространств и трансляцию логических адресов в физические. Так что скорее всего вместо доступа к железу получишь Access Violation.
Автор: perdun
Дата сообщения: 04.04.2006 01:28
Помогите скомпилить

http://www.securitylab.ru/poc/262241.php

У меня 15 тараканов Все тапки уже порвал
Автор: Mickey_from_nsk
Дата сообщения: 04.04.2006 12:28
Abs62
Если не ошибаюсь, у линейки Windows 9x несколько отличная от WinNT система защиты и распределения памяти. В ней туда могут и пустить. Досовские проги по крайней мере пускаются.
JekaCh
Действительно, забыл явно привести. Давно уже с адресами не работаю. А считывание можно и проще написать:

Код:
typedef unsigned char byte;
byte ReadByte95(int address)
{
return *((byte*)address);
}
Автор: Abs62
Дата сообщения: 04.04.2006 18:26
Mickey_from_nsk
Досовские пускаются. И Win16 пускаются, как в Win 3.1. А вот Win32 приложения - фигушки.
Автор: JekaCh
Дата сообщения: 05.04.2006 10:44
Как практика показала пускает . По крайней мере в тот диапазон адресов, который занимает под себя контроллер для которого и пишется прога.
Автор: linder
Дата сообщения: 06.04.2006 10:32
подскажите ошибку в коде на builder

#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}

void Look ()
{
AnsiString CurDir = GetCurrentDir();
TSearchRec sr;
int iAttributes = 0;


Form1->StringGrid1->RowCount = 1;
// iAttributes |= faReadOnly * CheckBox1->Checked;
// iAttributes |= faHidden * CheckBox2->Checked;
// iAttributes |= faSysFile * CheckBox3->Checked;
// iAttributes |= faVolumeID * CheckBox4->Checked;
// iAttributes |= faDirectory * CheckBox5->Checked;
// iAttributes |= faArchive * CheckBox6->Checked;
//iAttributes |= faAnyFile * CheckBox7->Checked;
// StringGrid1->RowCount = 0;
if (!FindFirst("*.*", faAnyFile|faDirectory,sr)) // == 0)

do
{
if(ExtractFileExt(sr.Name) == "*.*")

{

Form1->ListBox1->Items->Add(sr.Name);

//Form1->StringGrid1->RowCount = Form1->StringGrid1->RowCount + 1;
//Form1->StringGrid1->Cells[1][Form1->StringGrid1->RowCount-1] = sr.Name;

//Form1->StringGrid1->Cells[2][Form1->StringGrid1->RowCount-1] = IntToStr(sr.Size);
}
else if(sr.Attr==faDirectory && sr.Name!="." && sr.Name!="..")
{
SetCurrentDir(ExtractFileDir(sr.Name));
Look ();
SetCurrentDir(CurDir);
}
}
while(!FindNext(sr));
FindClose(sr);
}

//---------------------------------------------------------------------------
//---------------------------------------------------------------------------





void __fastcall TForm1::OKClick(TObject *Sender)
{
Look ();
}

//---------------------------------------------------------------------------
Автор: InFanTILDA
Дата сообщения: 06.04.2006 19:35
Ребята, подскажите пожалуйста!
как узнать размер массива что б потом передать его размер в функцию???
Автор: Abs62
Дата сообщения: 06.04.2006 21:28
InFanTILDA
Если размер на этапе компиляции известен, то просто:

Код:
int Array[100];
...
int NumberOfElements=sizeof(Array)/sizeof(Array[0]);
Автор: mikabud
Дата сообщения: 07.04.2006 12:03
Я новичок в программировании.
Поэтому прошу сразу не смеяться над моими вопросами.


Вопрос:
ни в одной книге явно не указано(или может я просто не обратил внимания)
что означает конкретно const к примеру в такой функции:

void display()const
{
cout<<str;
}
заранее спасибо за помощь
Автор: Mickey_from_nsk
Дата сообщения: 07.04.2006 12:11
mikabud
вообще то const атрибут применяется только к членам класса. Он означает, что в данном методе состояние класса не меняется. Из этого потом делается много выводов как компилятором, так и другими программистами.
Автор: JekaCh
Дата сообщения: 07.04.2006 19:34
Здравствуйте, у меня опять возникли вопросы по поводу написания интерфейса. Помогите плиз. Надо чтобы в ComboBox при выборе определённой текстовой строчки в переменную записывалось определённое значение. Вот как это должно выглядеть в моём представление:

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ComboBox1->Items->Add("Действие 1");
ComboBox1->Items->Add("Действие 2");
ComboBox1->Items->Add("Действие 3");
}


void __fastcall TForm1::ComboBox1Select(TObject *Sender)
{
Если выбрано "Действие 1" ->N=1;
Если выбрано "Действие 2" ->N=2;
Если выбрано "Действие 3" ->N=3;
}

Как это написать? Раньше у меня были цифры в комбобоксах, я просто делал StrToInt и в соответствие каждой цифре ставил какое-то действие. А что делать если в комбобоксе не цифра, а строка?
Автор: Fantom 14
Дата сообщения: 10.04.2006 09:43
смотри параметр ItemIndex, он изменяется в соотвествии с выбранным пунктом, и никаких StrToInt не надо. нумерация с 0

Добавлено:
надо сделать одну программку где в теле проги будут зашиты математические функции. в интерфейсе будет выводиться список этих функций в CheckListBox, как передавать номера выбранных функций в класс(где зашиты функции) для дальнейшей работы с этими функциями.
Автор: JekaCh
Дата сообщения: 13.04.2006 00:15
А никто совершенно случайно не рисовал в билдере гистограммы? А то я что-то не очень понимаю как ето сделат. Надо всё заставить в он-лайн режиме рисоваться на гистограмме (по оси х - число по у - сколько раз встречается)? Пробовал использовать компонент Chart тип Area. Если использовать просто Series1->Add(z[0]), то он по оси х - пишет номер события от 0 соответсвенно и до бесконечности, а по оси у - величину числа в этом событие, а нужно-то совершенно другое .
Автор: 0Vovan0
Дата сообщения: 14.04.2006 05:00
Искал копмилятор + IDE для мелких программок на Си, только начал учить, пробовал Dev C++, Janes File Editor, Pelles C. Последние два наиболее понравились, но вот всех них не работает например такой вот код


Цитата:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
int i, ar[120];
randomize();
for (i=0; i<120; i++) {
ar[i]=random(99);
printf("%i", ar[i]);
}

getchar();
}

Ругается на ramdom(), randomize(), чет типа не может найти прототипы этих функций. Почему? stdlib.h, time.h и понятно stdio.h во всех трех имеются, как я понимаю там описывается эти функции.
В билдере све прекрасно работает, но по многим причинам он не устраивает.

Как решить эту проблему? Или мож че аналогичное посоветуете?
Автор: Abs62
Дата сообщения: 14.04.2006 07:59
0Vovan0

Цитата:
как я понимаю там описывается эти функции.

А это надо не понимать, а посмотреть.
В Visual C++, например, этих функций нет - есть rand и srand. Что из этой области реализовано в упомянутых системах - надо смотреть по хелпу и/или хидерам.
Автор: viralig
Дата сообщения: 14.04.2006 11:36
Здравствуйте!



Очень прошу помочь с одной проблемой.

Я пишу программу в среде C++ Builder 6. С помощью компонента NMSMTP я посылаю email письма.
Для этого я использую следующий код:

/********************************
NMSMTP2 -> Host = "******";
NMSMTP2 -> Port = 25;
NMSMTP2 -> UserID = "info";

NMSMTP2 -> Connect ();

NMSMTP2 -> PostMessage -> FromAddress = "**********";
NMSMTP2 -> PostMessage -> FromName = "***********";
NMSMTP2 -> PostMessage -> ToAddress -> Text = "**********";
NMSMTP2 -> PostMessage -> Body -> Text = "Hello !";

NMSMTP2 -> SendMail ();

*********************************/

Когда выполняется метод SendMail, то возникает такая ошибка

Project Project1.exe raised exception class Exception with message '505 Authentication required
'. Process stopped. Use Step or Run to continue.

Письмо естественно не отправляется.
Сервер Exchange.

Заранее благодарен.
Автор: Mickey_from_nsk
Дата сообщения: 14.04.2006 14:16
Это такая фича эксченджа.
Как обходить не знаю, по идее SMTP протокол не требует аутентификации.
Нашел такую ссылку. Мне понравилось.
http://bugtraq.ru/cgi-bin/forum.mcgi?type=sb&b=16&m=89128
Может еще это поможет
http://support.microsoft.com/default.aspx?kbid=298589
Автор: Karlsberg
Дата сообщения: 14.04.2006 16:07
viralig
Попробуй запустить сниффер перед запуском проги. Скорее всего сервер требует имя и пароль, и ты все увидишь в TCP-логах
Автор: 0Vovan0
Дата сообщения: 14.04.2006 21:37
Abs62
В хелпе я чет вообще функции randomize() не нашел, попробую так как ты сказал.
Автор: Abs62
Дата сообщения: 14.04.2006 23:36
0Vovan0
Посмотрел в Борландовских хидерах - там тоже задействованы rand и srand:

Код: #define random (num) (int)(((long)rand()*(num))/(RAND_MAX+1))
#define randomize() srand((unsigned)time(NULL))
Автор: 0Vovan0
Дата сообщения: 15.04.2006 03:59
Abs62
Не очень понял что это
Цитата:
#define random (num) (int)(((long)rand()*(num))/(RAND_MAX+1))
#define randomize() srand((unsigned)time(NULL))

значит, но rand() и srand() почти помогли.

Теперь JFE(gcc 2.95), Pellec C, Dev C++ на эти функции не ругаются, но на почти тот же код:

Цитата:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
int i, ar[120];
rand();
for (i=0; i<120; i++) {
ar[i]=srand(99);
printf("%i", ar[i]);
}

getchar();
return 0;
}

говорят такое:
1 JFE:

Цитата:
g++.exe -x c++ -c E:\DOCUME~1\web\МОИДОК~1\unknown1 -o E:\DOCUME~1\web\МОИДОК~1\unknown1.o -Wall -fpermissive
In file included from E:\DOCUME~1\web\МОИДОК~1\unknown1:1:
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\stdio.h:130: warning: `__cdecl__' attribute directive ignored
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\stdio.h:131: warning: `__cdecl__' attribute directive ignored
In file included from E:\DOCUME~1\web\МОИДОК~1\unknown1:2:
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\stdlib.h:193: warning: `__cdecl__' attribute directive ignored
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\stdlib.h:194: warning: `__cdecl__' attribute directive ignored
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\stdlib.h:198: warning: `__cdecl__' attribute directive ignored
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\stdlib.h:218: warning: `__cdecl__' attribute directive ignored
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\stdlib.h:219: warning: `__cdecl__' attribute directive ignored
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\stdlib.h:220: warning: `__cdecl__' attribute directive ignored
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\stdlib.h:221: warning: `__cdecl__' attribute directive ignored
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\stdlib.h:222: warning: `__cdecl__' attribute directive ignored
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\stdlib.h:223: warning: `__cdecl__' attribute directive ignored
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\stdlib.h:224: warning: `__cdecl__' attribute directive ignored
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\stdlib.h:232: warning: `__cdecl__' attribute directive ignored
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\stdlib.h:233: warning: `__cdecl__' attribute directive ignored
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\stdlib.h:476: warning: `__cdecl__' attribute directive ignored
In file included from E:\DOCUME~1\web\МОИДОК~1\unknown1:3:
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\time.h:93: warning: `__cdecl__' attribute directive ignored
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\time.h:94: warning: `__cdecl__' attribute directive ignored
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\time.h:95: warning: `__cdecl__' attribute directive ignored
..\lib\gcc-lib\i386-mingw32\2.95.2\..\..\..\..\include\time.h:96: warning: `__cdecl__' attribute directive ignored
E:\DOCUME~1\web\МОИДОК~1\unknown1: In function `int main()':
E:\DOCUME~1\web\МОИДОК~1\unknown1:9: void value not ignored as it ought to be
Failure


Pellec C покороче, но все равно не понятно:

Цитата:
Building x.obj.
E:\Documents and Settings\web\¦юш фюъєьхэЄv\x.c(9): error #2168: Operands of = have incompatible types 'int' and 'void'.
*** Error code: 1 ***
Done.


Dev C++"

Цитата:
9 untitled1.c
void value not ignored as it ought to be


Девятая строчка это
Цитата:
ar[i]=srand(99);

И что в ней не так, чего всем им не нравится, не понимаю
Автор: Abs62
Дата сообщения: 15.04.2006 13:11
0Vovan0
Просто ты перепутал rand и srand.

Цитата:

rand
int rand( void );
Return Value
rand returns a pseudorandom number, as described above. There is no error return.
Remarks
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.

srand
Sets a random starting point.
void srand(
unsigned int seed
);
Parameters
seed
Seed for random-number generation
Remarks
The srand function sets the starting point for generating a series of pseudorandom integers. To reinitialize the generator, use 1 as the seed argument. Any other value for seed sets the generator to a random starting point. rand retrieves the pseudorandom numbers that are generated. Calling rand before any call to srand generates the same sequence as calling srand with seed passed as 1.

srand только инициализирует генератор случайных чисел и не возвращает никакого значения - его возвращает rand. Естественно, при этом строка "ar[i]=srand(99);" вызывает ошибку компиляции. Просто поменяй srand и rand местами.
Автор: viralig
Дата сообщения: 17.04.2006 17:45
Я и без снифера знаю, что кроме юзера оно требует и пароль.
Вопрос в том как его внести с помощью NMSMTP?
Автор: JekaCh
Дата сообщения: 17.04.2006 19:28
Не подскажите как сохранить график с компоненты Tchart в графический файл?
Автор: EZH
Дата сообщения: 17.04.2006 20:44
JekaCh

Цитата:

Chart1->SaveToBitmapFile("file.bmp");
Автор: JekaCh
Дата сообщения: 17.04.2006 21:23
Спасибо работает. А можно ли повысить разрешение сохраняемого файла? Он сохраняет в файл с разрешением равным размерам окна. А нужно больше.
Автор: 0Vovan0
Дата сообщения: 18.04.2006 03:02
Abs62
Да нет, я проверял и так и так:
Pellec C:

Цитата:

Building x.obj.
E:\Documents and Settings\web\¦юш фюъєьхэЄv\x.c(7): error #2070: Insufficient number of arguments to 'srand'.
E:\Documents and Settings\web\¦юш фюъєьхэЄv\x.c(9): error #2138: Too many arguments to 'rand'.
*** Error code: 1 ***
Done.

Остальные аналогично ругаются.
А в чем ты сам пишеш? Мож посоветуеш что-то кроме билдера и виж студии?
Автор: Abs62
Дата сообщения: 18.04.2006 07:04
0Vovan0
И правильно ругаются. Я же привёл описания этих функций - rand вызывается без параметров, а srand - с параметром, определяющим стартовое значение генератора случайных чисел.

Цитата:
А в чем ты сам пишеш? Мож посоветуеш что-то кроме билдера и виж студии?

Студия, Dev-C++. Но его ты уже опробовал.
Автор: 0Vovan0
Дата сообщения: 19.04.2006 02:33
Abs62
Чет ты меня совсем запутал


Цитата:
srand только инициализирует генератор случайных чисел и не возвращает никакого значения - его возвращает rand.



Цитата:
Я же привёл описания этих функций - rand вызывается без параметров, а srand - с параметром, определяющим стартовое значение генератора случайных чисел.


Из первого я понял что rand аналог random, а srand - randomize.
Но random вызывается с параметром, а randomize - без, и тогда втоой вариант совсем непонятен.

Если не сложно, напиши аналогичную програмку с рендомом в Dev-C++, и скомпилируй её. Если заработает - обьясни где у меня ошибка.
Автор: Abs62
Дата сообщения: 19.04.2006 07:03
0Vovan0

Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void randomize()
{
srand((unsigned)time(NULL));
}

int random(int num)
{
int n=rand();
return(n*num/(RAND_MAX+1));
}

int main(void) {
int i, ar[120];
randomize();
for (i=0; i<120; i++) {
ar[i]=random(99);
printf("%i", ar[i]);
}

getchar();
}

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.