Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

13.06.2010, 21:30
|
|
Участник форума
Регистрация: 06.02.2006
Сообщений: 177
Провел на форуме: 1576821
Репутация:
88
|
|
Grek
смотрим на const char * format
и для чего он нужен
http://www.cplusplus.com/reference/clibrary/cstdio/fprintf/
|
|
|

13.06.2010, 21:41
|
|
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме: 2066562
Репутация:
86
|
|
2Grek мешать С++ с Си не хорошо
Код:
#include <iostream>
#include <locale>
#include <fstream>
#include <string>
struct user {
std::string name;
std::string nick;
std::string email;
int icq;
};
int main(int argc, char* argv[]) {
std::setlocale(LC_ALL, "Russian");
user userdata;
std::cout << "Введите имя\n";
std::cin >> userdata.name;
std::cout << "Введите ник\n";
std::cin >> userdata.nick;
std::cout << "Введите Email\n";
std::cin >> userdata.email;
std::cout << "Введите icq\n";
std::cin >> userdata.icq;
std::ofstream file("C:\\user.txt");
file << "name:" << userdata.name << "\n";
file << "nick:" << userdata.nick << "\n";
file << "email:" << userdata.email << "\n";
file << "icq:" << userdata.icq;
file.close();
system("pause");
}
вот так точно будет работать.
|
|
|

13.06.2010, 21:47
|
|
Новичок
Регистрация: 19.05.2010
Сообщений: 10
Провел на форуме: 76057
Репутация:
2
|
|
Сообщение от rudvil
2Grek мешать С++ с Си не хорошо
Код:
#include <iostream>
#include <locale>
#include <fstream>
#include <string>
struct user {
std::string name;
std::string nick;
std::string email;
int icq;
};
int main(int argc, char* argv[]) {
std::setlocale(LC_ALL, "Russian");
user userdata;
std::cout << "Введите имя\n";
std::cin >> userdata.name;
std::cout << "Введите ник\n";
std::cin >> userdata.nick;
std::cout << "Введите Email\n";
std::cin >> userdata.email;
std::cout << "Введите icq\n";
std::cin >> userdata.icq;
std::ofstream file("C:\\user.txt");
file << "name:" << userdata.name << "\n";
file << "nick:" << userdata.nick << "\n";
file << "email:" << userdata.email << "\n";
file << "icq:" << userdata.icq;
file.close();
system("pause");
}
вот так точно будет работать.
учебники просто разные,сборная CCCP ))
Спасиб всем.Разобрался почуть.
|
|
|

14.06.2010, 03:13
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
Grek
ну и в довесок - не юзай using namespace std. если хочется упростить - делай
Код:
using std::cin;
using std::cout;
using std::string;
using std::ofstream;
юзанье всего неймспейса - моветон.
|
|
|

14.06.2010, 21:32
|
|
Познающий
Регистрация: 22.11.2009
Сообщений: 53
Провел на форуме: 33126
Репутация:
0
|
|
Сообщение от Ra$cal
Grek
ну и в довесок - не юзай using namespace std. если хочется упростить - делай
Код:
using std::cin;
using std::cout;
using std::string;
using std::ofstream;
юзанье всего неймспейса - моветон.
Сори за глупый вопрос, но почему using namespace std нехорошо?
|
|
|

14.06.2010, 21:50
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
потому что могут перекрыться классы в неймспейсах, например будет класс string из stl, и класс string от стороннего поставщика с гораздо большим функционалом, например в неймспейсе megalib. Если заюзить неймспесы std и megalib будет конфликт. Так же если вы не заюзали стд, а заюзали megalib, то при использовании объявления string наверняка большинство будет думать о классе стринг из std. То же самое будет и с самим разработчиком через некоторое время. То есть теперь надо будет думать, а откуда этот класс взят. Ну и плюс все что объявлно в неймспейсе становится видимо глобально. Поэтому и не рекомендуют так делать.
И да, все юзинги писать надо в cpp файлах, а не в хидерах.
|
|
|

14.06.2010, 23:10
|
|
Познающий
Регистрация: 22.11.2009
Сообщений: 53
Провел на форуме: 33126
Репутация:
0
|
|
Все понятно.Спасибо.
|
|
|

17.06.2010, 12:52
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
Код:
recv(s, response, 1024, 0);
Этим кодом я получаю 1024 байта и записываю их в response.
Как получить абсолютно всю информацию, предварительно не зная сколько байтов, и записать все это в один массив символов?
Код:
do
{
iResult = recv(s, response, 1024, 0);
}
while(iResult > 0);
Этим кодом получается вся информация, но проблема в том, что в response оказываются последние 1024 байта, что очевидно. Необходимо как-то создать буфер неизвестной длины, и в цикле делать конкатенацию буфера вместе с полученной инфой, но как?
Еще как вариант - создать динамический массив, и в цикле расширять его размер, опять вопрос - как?
Спасибо заранее.
|
|
|

17.06.2010, 13:08
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме: 4137635
Репутация:
2407
|
|
Код:
string answer;
while( (iResult = recv(s, response, 1024, 0)) > 0)
answer.append(response, iResult);
//весь ответ в answer.c_str()
Если нуллбайты будут в ответе, то такой способ скорее всего не подойдет.
Последний раз редактировалось d_x; 17.06.2010 в 13:11..
|
|
|

17.06.2010, 13:33
|
|
Участник форума
Регистрация: 07.01.2009
Сообщений: 237
Провел на форуме: 745649
Репутация:
97
|
|
Сообщение от mailbrush
Код:
recv(s, response, 1024, 0);
Этим кодом я получаю 1024 байта и записываю их в response.
Как получить абсолютно всю информацию, предварительно не зная сколько байтов, и записать все это в один массив символов?
Код:
do
{
iResult = recv(s, response, 1024, 0);
}
while(iResult > 0);
Этим кодом получается вся информация, но проблема в том, что в response оказываются последние 1024 байта, что очевидно. Необходимо как-то создать буфер неизвестной длины, и в цикле делать конкатенацию буфера вместе с полученной инфой, но как?
Еще как вариант - создать динамический массив, и в цикле расширять его размер, опять вопрос - как?
Спасибо заранее.
Храни строки в списке, а не в массиве. Например, принимаешь по 1024 символа.
Собственно список - это и есть какое-то подобие динамического массива.
Тогда кодишь так:
Код:
struct info
{
info * next; // Указатель на след. элемент
info * prev; // и на предыдущий
char data[1024];
} node;
...
recv(s, node.data, 1024, 0);
/*
В классе хранишь указатели на первую принятую строку. Далее раотаешь с объектом.
*/
...
Далее можно написать класс, реализующий линейный двусвязный список, нафигачить ему конструкторы копирования всякие, перегрузку выражений и т.д.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|