Перейти к содержимому

Фото
* * * * - 1 голосов

Вопросы и Ответы

PHP Javascript HTML/CSS SQL Ruby Java C/C++ Visual Basic C#

  • Вы не можете создать новую тему
  • Please log in to reply
416 ответов в этой теме

#1 еть.

еть.
  • Постоялец
  • 2 655 сообщений

Отправлено 25 ноября 2005 - 22:21

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

Сообщение изменено: Inori (12 июня 2013 - 21:06 )

  • 0

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


#2 † Vic †

† Vic †

    leather !

  • Пользователь
  • 133 сообщений
  • Откуда:Estland

Отправлено 26 ноября 2005 - 12:34

Если я праивльно понял, что тебе нужно, то вот оно: :)

#include <iostream.h>
#include <string.h>

int main(void)
{
char name[15];

cout<<"Welcome\nPlease ebter Your name:\n";

cin>>name;

cout<<"Hello "<<name;

cout<<"\nDecode the number: 442777777999\n And then enter the decoded word\n";

bool flag = true;

while(flag)
{
 char pass[6];

 cout<<"The word is: ";

 cin>>pass;

 if(strcmp(pass,"harry") == 0)
 {
  cout<<"\nNice job, You have made it!\nGreetings for you,"<<name<<" from Me! :)\n";
  return 0;
 }
 else
 {
  cout<<"\nSorry, wrong word.\nDo you need a clue ?";

  int answer;

  cout<<"\nYes[1], No[0]\n";

  cin>>answer;

  if(answer == 0)
  {

   cout<<"\nPerhaps the next time You will manage to give the right answer\n Bye!";
   flag = false;

  }
  if(answer == 1)
  {

   cout<<"\nTry to type that number on Mobile phone\n";

  }
 }
}
return 0;
}


P.S.: я компилировал в DMC

Сообщение изменено: vic-221 (26 ноября 2005 - 12:36 )

  • 0
"Бог, если ты есть, если ты существуешь, если видишь всё, что здесь сейчас происходит....то катись отсюда, Бог, подальше !"

"Sometimes I'm scared of being Ozzy Osbourne. But it could have been worse. I could have been Sting" © Ozzy

#3 Мест

Мест
  • Пользователь
  • 280 сообщений
  • Откуда:Вселенной

Отправлено 26 ноября 2005 - 15:56

О, спасибо огромное!
И опять вопрос: как сделать, что бы после того, елси ввёл правильное слово, то появлялось поздравление это я понял, но вот что бы консоль не закрывалась, и это можно было прочитать? getch() я ставил, в этом куске, а он опять возращается к Enter The Word.
Ж)

Добавлено в [mergetime]1133013362[/mergetime]
А, я понял!

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

int main(void)
{
char name[15];

cout<<"Welcome\nPlease enter Your name:\n";

cin>>name;

cout<<"Hello "<<name;

cout<<"\nDecode the number: 442777777999  And then enter the decoded word\n";

bool flag = true;

while(flag)
{
char pass[6];

cout<<"The word is: ";

cin>>pass;

if(strcmp(pass,"harry") == 0)
{
 cout<<"\nNice job, You have made it!\nGreetings for you,"<<name<<" from Me! :)\n";
  getch();
  return 0;
}
else
{
 cout<<"\nSorry, wrong word.\nDo you need a clue ?";

 int answer;

 cout<<"\nYes[
 1], No[0]\n";

 cin>>answer;

 if(answer == 0)
 {

  cout<<"\nPerhaps the next time You will manage to give the right answer\n Bye!";
  flag = false;
  getch();
  return 0;

 }
 if(answer == 1)
 {

  cout<<"\nTry to type that number on Mobile phone\n";

 }
}
}
return 0;

}

Ща просмотрел, странная вещь получается, если в ьполе ответа ввести два слова, ну или просто буквы разделить пробелом, то он начинает ужас творить!
Может не очень красиво выглядит, но вроде пашет, Спасибо vic-221!
П.С. МОдерам: Не против, если тека останется, у меня просто возникает много вопросов по этому поводу, да я думаю не только у меня.
С Уважением,
Gnom

Сообщение изменено: Gn0m (26 ноября 2005 - 16:00 )

  • 0
Кто владеет информацией, тот владеет Миром.

#4 † Vic †

† Vic †

    leather !

  • Пользователь
  • 133 сообщений
  • Откуда:Estland

Отправлено 27 ноября 2005 - 20:28

Так, теперь у меня вопрос ! Почему этот код не работает:

файл data.cpp:

#include <iostream.h>
#include "data.h"

int main(void)
{
	person_data records;

	int index;

	load_data(&records);

	print_data(&records);

	return 0;
}


файл data.h:

#include <stdio.h>
#include <iostream.h>

struct person_data
{
	char* first_name;
	char* last_name;
	char* email_addr;
	long phone_number;
};

void load_data(person_data* pObject)
{
	printf("Enter the first name: ");
	scanf("%s",pObject -> first_name);

	printf("Enter the last name: ");
	scanf("%s",pObject -> last_name);

	printf("Enter the e-mail address: ");
	scanf("%s",pObject -> email_addr);

	printf("Enter the phone number: ");
	scanf("%d",pObject -> phone_number);
}

void print_data(person_data* pObject)
{
	cout << "First name: " << pObject -> first_name << endl << endl;
	cout << "Last name: " << pObject -> last_name << endl << endl;
	cout << "E-mail address: " << pObject -> email_addr << endl << endl;
	cout << "Phone number: " << pObject -> phone_number << endl;
}

Сообщение изменено: vic-221 (27 ноября 2005 - 20:43 )

  • 0
"Бог, если ты есть, если ты существуешь, если видишь всё, что здесь сейчас происходит....то катись отсюда, Бог, подальше !"

"Sometimes I'm scared of being Ozzy Osbourne. But it could have been worse. I could have been Sting" © Ozzy

#5 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 27 ноября 2005 - 21:51

Так, теперь у меня вопрос ! Почему этот код не работает:

файл data.cpp:

#include <iostream.h>
#include "data.h"

int main(void)
{
	person_data records;

	int index;

	load_data(&records);

	print_data(&records);

	return 0;
}
файл data.h:

#include <stdio.h>
#include <iostream.h>

struct person_data
{
	char* first_name;
	char* last_name;
	char* email_addr;
	long phone_number;
};

void load_data(person_data* pObject)
{
	printf("Enter the first name: ");
	scanf("%s",pObject -> first_name);

	printf("Enter the last name: ");
	scanf("%s",pObject -> last_name);

	printf("Enter the e-mail address: ");
	scanf("%s",pObject -> email_addr);

	printf("Enter the phone number: ");
	scanf("%d",pObject -> phone_number);
}

void print_data(person_data* pObject)
{
	cout << "First name: " << pObject -> first_name << endl << endl;
	cout << "Last name: " << pObject -> last_name << endl << endl;
	cout << "E-mail address: " << pObject -> email_addr << endl << endl;
	cout << "Phone number: " << pObject -> phone_number << endl;
}

Просмотреть сообщение



1. include <iostream.h>
в C++ не нужно .h в конце стандартных библиотечных файлов, просто include <iostream>

2. в твоем обьявлении person_data - first_name, last_name, email_addr - ето указатели на char, однако, когда ты пытаешься считать в них данные результат не предопределен, т.к они просто указывают на какое то место в памяти, а не на специально определенное для них свободное место. В результате программа ломается (crashes). Тут есть несколько вариантов, как ето исправить, например, определить ети переменные как массив char размером N байт, или же динамически выделять память во время исполнения программы (функция malloc в C, оператор new в C++). Так как ето все-таки C++ код (вроде бы), то я думаю, еше лучше использовать std::string, т.к. тогда вообше не придеться беспокоиться о памяти.

3. scanf() - не очень надежная функция и заставить ее работать надежно не очень легко. Проблем несколько, например, если у тебя буффер ввода размером 10, и ты используешь scanf("%s", buf); a user вводит больше 10, то у тебя buffer overflow, что не есть хорошо. можно, конечно, сделать так: scanf("%9s", buf), но тут еше такая проблема, что scanf читает до первого пробела, то есть два слова, разделенные пробелом, просто так scanf не считает. Лучше всего для чтения строк из входного потока подходит fgets(buf, sizeof buf, stdin) - ето C (scanf кстати тоже c), а в C++ getline(cin, str), где str - std::string.

4. у тебя нигде нет ни префиксов std::, ни using обьявлений.

Добавлено в [mergetime]1133121119[/mergetime]
Gn0m, в твоем коде тоже потенциальный buffer overflow, переполнение буффера,
char name[15];
...
char pass[6];
если юзер введет больше, то программа будет писать уже не в свою зарезервированную память. Контроллировать ввод пользователя необходимо всегда, надеяться, что ввод будет правильным не следует никогда.
  • 0
int main(void)

#6 Мест

Мест
  • Пользователь
  • 280 сообщений
  • Откуда:Вселенной

Отправлено 27 ноября 2005 - 23:54

V^v, а как сделать тогда можно было- бы?
  • 0
Кто владеет информацией, тот владеет Миром.

#7 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 28 ноября 2005 - 16:44

использовать std::string или каким-то образом считывать ограниченное количество байтов (fgets или свою написать функцию)
  • 0
int main(void)

#8 † Vic †

† Vic †

    leather !

  • Пользователь
  • 133 сообщений
  • Откуда:Estland

Отправлено 28 ноября 2005 - 21:23

Спасибо за информацию V^v ! А не мог бы ты объяснить суть этих пространств имен, а то я что-то до сих пор не догоняю этой темы :unsure: Для чего они нужны

Сообщение изменено: vic-221 (28 ноября 2005 - 21:24 )

  • 0
"Бог, если ты есть, если ты существуешь, если видишь всё, что здесь сейчас происходит....то катись отсюда, Бог, подальше !"

"Sometimes I'm scared of being Ozzy Osbourne. But it could have been worse. I could have been Sting" © Ozzy

#9 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 28 ноября 2005 - 22:28

пожалуйста :)
префикс std:: указывает на то, что имя после него является частью пространства имен(namespace) std, то есть пространства имен стандартной библиотеки. Страуструп так пишет о пространствах имен: "Пространствo имен является механизмом отражения логического группирования. Если некоторые обьявления можно обьединить по какому-либо критерию, их можно поместить в одно пространство имен."
чтобы всегда не добавлять квалификатор(префикс) для явного указания пространства имен, можно использовать using-обьявления и using-директивы.
using-обьявление делает доступным одно имя из Пр.имен, а using-дирктива все Пр.имен. Например,
using std::cout;
using std::cin;
// теперь можно просто писать cout ... cin ... без std::
или
using namespace std;
// можно использовать все имена из std без префикса
последний вариант часто подвергают критике, т.к. использовать все имена из std врядли кому-то придет в голову в одной программе, и может возникнуть путаница с именами библиотечными и именами юзера. Хотя нет ничего страшно, если в простой учебной программе для краткости написать using namespcae std;

Сообщение изменено: V^v (28 ноября 2005 - 22:38 )

  • 0
int main(void)

#10 Slash

Slash
  • Пользователь
  • 78 сообщений
  • Откуда:Estonia - Tallinn

Отправлено 29 ноября 2005 - 15:46

Страустроп в помощь! Вот ссылка на второе издание "Язык прграммирования С++":
http://www.lib.ru/CPPHB/cpptut.txt

Хотя, конечно, я предпочитаю "бумажный" вариант, чтобы в любое время всё что надо найти, не сворачивая редактор. :)
  • 0

#11 еть.

еть.
  • Постоялец
  • 2 655 сообщений

Отправлено 15 августа 2010 - 13:17

Если у вас есть какой-либо быстрый вопрос, не требующий длительного обсуждения, разбирания кода и вникания в суть проблемы, смело задавайте его здесь.
  • 0

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


#12 Yukka

Yukka
  • Пользователь
  • 37 сообщений

Отправлено 15 августа 2010 - 13:19

eclipse vs netbeans?
в чём лучше-то?
а ты в чём?
  • 0

#13 еть.

еть.
  • Постоялец
  • 2 655 сообщений

Отправлено 15 августа 2010 - 13:27

Если у вас есть какой-либо быстрый вопрос, не требующий длительного обсуждения, разбирания кода и вникания в суть проблемы, смело задавайте его здесь.
  • 0

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


#14 ParadoxL

ParadoxL
  • Постоялец
  • 5 023 сообщений
  • Откуда:Edinburg

Отправлено 15 августа 2010 - 15:54

IntelliJ , MyEclipse.
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#15 Isamashii Tora

Isamashii Tora

    Странствующий

  • Постоялец
  • 1 840 сообщений
  • Откуда:Asylum

Отправлено 22 августа 2010 - 18:11

Приветствую. Давайте немного поговорим о безопасности запросов к MySQL.
<?php
// Include Variables
include ("variables.php");
// Connect To Database
$con = mysql_connect("$db_name","$db_user","$db_pass");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_close($con);
?>
В variables.php у нас обозначены "$db_name","$db_user","$db_pass", в открытом виде. Файл у нас лежит в папке admin, которая защищена .htaccess-om (логин-пароль для доступа к папке). Самому файлу вариаблов выдан 666 доступ.

Каков шанс взлома и возможность редиске узнать акк-пароль доступа к БД? :)
Также интересно узнать насколько вы доверяете защите с помощью .htaccess?

Сообщение изменено: Clement (22 августа 2010 - 18:13 )

  • 0
"Миры рождаются и умирают, память о людях с которыми их прошел - остается" © Тристар

#16 TCC

TCC
  • Пользователь
  • 18 сообщений
  • Откуда:Tallinn

Отправлено 23 августа 2010 - 00:02

Какую литературу или видео/аудио уроки посоветуйте, если нету возможности кодить в Windows? Только линункс.

Ах да, если ничего не умею, вообще. Даже, если с bash до конца не разобрался.
  • 0

#17 Sergio

Sergio
  • Постоялец
  • 3 051 сообщений

Отправлено 23 августа 2010 - 17:26

Какую литературу или видео/аудио уроки посоветуйте, если нету возможности кодить в Windows? Только линункс.

А какая разница, в Windows или в Linux? Для изучения основ все равно.
Страуструп - это классика. Нужно только разобраться с ключами GCC и запуском откомпилированных программ.
  • 1

#18 TCC

TCC
  • Пользователь
  • 18 сообщений
  • Откуда:Tallinn

Отправлено 23 августа 2010 - 17:39

Sergio,

Нужно только разобраться с ключами GCC

Какие ключи? Разве там не просто в терминале нужно написать gcc {имя файла}, а у файла поставить нужное расширение, типо .java или .cpp?
  • -1

#19 еть.

еть.
  • Постоялец
  • 2 655 сообщений

Отправлено 23 августа 2010 - 18:17

TCC,
Нет, не просто.
Вот допустим:
gcc sitemap.c -o sitemap -L/usr/lib/mysql -lmysqlclient -lm
иными словами, из исходника sitemap.c компилируется исполняемый файл sitemap с поддержкой mysql и математических функций.

Сообщение изменено: еть. (23 августа 2010 - 18:17 )

  • 1

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


#20 еть.

еть.
  • Постоялец
  • 2 655 сообщений

Отправлено 23 августа 2010 - 18:59

В данном случае - какой смысл в .htaccess? С ним или без него, при обращении браузером к variables.php никакой информации злоумышленик не получит. Если же у него есть ФТП доступ или же к шеллу, то .htaccess точно не спасёт.
  • 0

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


#21 TCC

TCC
  • Пользователь
  • 18 сообщений
  • Откуда:Tallinn

Отправлено 23 августа 2010 - 19:05

Я где-то прочитал, что всё можно просто заменить на g++, вместо gcc и проблем с ключами . Это правда?
  • 0

#22 Isamashii Tora

Isamashii Tora

    Странствующий

  • Постоялец
  • 1 840 сообщений
  • Откуда:Asylum

Отправлено 23 августа 2010 - 20:13

В данном случае - какой смысл в .htaccess? С ним или без него, при обращении браузером к variables.php никакой информации злоумышленик не получит. Если же у него есть ФТП доступ или же к шеллу, то .htaccess точно не спасёт.

Хм. "Чтобы никто не догадался!" (с) Операция Ы
Просто защитить всю папку .htaccess-ом или 666, что надёжнее? :) Понятно что если узнают пароль к фтп или шеллу - труба.
Спасибо за ответ.

Тогда еще один вопрос: к примеру мы делаем поиск по базе данных, метод - ПОСТ. Сможет ли он сделать хитрый запрос к базе данных и как-то использовать против хозяина сайта? А то нет желания делать trimmed защиту запросов. Понимаю, что без самого кода сложно представить, но если так, навскидку. Реально гадость сделать?

Сообщение изменено: Clement (23 августа 2010 - 20:15 )

  • 0
"Миры рождаются и умирают, память о людях с которыми их прошел - остается" © Тристар

#23 TCC

TCC
  • Пользователь
  • 18 сообщений
  • Откуда:Tallinn

Отправлено 24 августа 2010 - 14:34

// STUDY :3
#include <iostream>
#include <stdio.h>
using namespace std;

int main(int nNumberofArgs, char* pszArgs[])

{
int nValue1;
cout<<"1: ";
cin>>nValue1;
int nValue2;
cout<<"2";
cin>>nValue2;
int nValue3;
cout<<"3";
cin>>nValue3;
int nValue4;
nValue4 = nValue1 + nValue2 + nValue3;
cout>>"4: ";
cout>>nValue4;
return 0;
}



Что я сделал тут не так, как надо?

ololo2.cpp: In function ‘int main(int, char**)’:
ololo2.cpp:20: error: no match for ‘operator>>’ in ‘std::cout >> "4: "’
ololo2.cpp:21: error: no match for ‘operator>>’ in ‘std::cout >> nValue4’



И
  • 0

#24 Sergio

Sergio
  • Постоялец
  • 3 051 сообщений

Отправлено 24 августа 2010 - 14:45

Что я сделал тут не так, как надо?

Компилятор же говорит

cout>>"4: ";
cout>>nValue4;
  • 1

#25 TCC

TCC
  • Пользователь
  • 18 сообщений
  • Откуда:Tallinn

Отправлено 24 августа 2010 - 14:46

Sergio,
лол, я ступил.

Спасибо.
  • 1

#26 Alexano

Alexano
  • Пользователь
  • 109 сообщений

Отправлено 30 августа 2010 - 11:00

Хм. "Чтобы никто не догадался!" (с) Операция Ы
Просто защитить всю папку .htaccess-ом или 666, что надёжнее? :) Понятно что если узнают пароль к фтп или шеллу - труба.
Спасибо за ответ.

Тогда еще один вопрос: к примеру мы делаем поиск по базе данных, метод - ПОСТ. Сможет ли он сделать хитрый запрос к базе данных и как-то использовать против хозяина сайта? А то нет желания делать trimmed защиту запросов. Понимаю, что без самого кода сложно представить, но если так, навскидку. Реально гадость сделать?

ну во первых ПОСТ, ГЕТ разницы нет. Инъекции везде делаются по одному же и тому принципу. Приходящие данные - любые - нужно фильтровать и использовать специальные функции. mysql_real_escape_string, приравнивание к типу, проверку на допустимое значение и т.д.
  • 0

#27 Isamashii Tora

Isamashii Tora

    Странствующий

  • Постоялец
  • 1 840 сообщений
  • Откуда:Asylum

Отправлено 30 августа 2010 - 15:03

Если не ошибаюсь, ПОСТ даёт запрос конкретно на сервер, скрыто для пользователя. А ГЕТ выдаёт себя в командной строке...
Может кто поделиться литературой где подробнее можно почитать про инжекты?
  • 0
"Миры рождаются и умирают, память о людях с которыми их прошел - остается" © Тристар

#28 Cepera

Cepera
  • Пользователь
  • 277 сообщений
  • Откуда:Таллинн, ТТУ

Отправлено 30 августа 2010 - 17:31

Clement,
в гyгле поищи "xss уязвимости", тут есть нюансы: версия mysql, sql запрос.
get тоже "даёт запрос конкретно на сервер".
  • 0

#29 еть.

еть.
  • Постоялец
  • 2 655 сообщений

Отправлено 30 августа 2010 - 17:41

в гyгле поищи "xss уязвимости", тут есть нюансы: версия mysql, sql запрос.

xss вообще из другой оперы.
гуглить надо "sql injection".
  • 0

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


#30 Isamashii Tora

Isamashii Tora

    Странствующий

  • Постоялец
  • 1 840 сообщений
  • Откуда:Asylum

Отправлено 30 августа 2010 - 18:00

Спасибо, будем читать как защищаться.
  • 0
"Миры рождаются и умирают, память о людях с которыми их прошел - остается" © Тристар





Читать еще на тему: PHP, Javascript, HTML/CSS, SQL, Ruby, Java, C/C++, Visual Basic, C#