Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.12.2009, 16:35   #1
Дырдин
Пользователь
 
Аватар для Дырдин
 
Регистрация: 26.09.2009
Сообщений: 81
По умолчанию Пресловутый генератор паролей

Почему-то при размере пароля 5-13 знаков всё отлично, но при использовании большей длины ничего не получается. Весь день борюсь. Может кто скажет где ошибка?

Код:
# include <stdio.h>
# include <conio.h>
# include <math.h>
# include <time.h>
# include <stdlib.h>
# include <locale.h>
# include <string.h>
# include <stdlib.h>

void main (void)
{
int dlina,s;
int simvol = 1;
setlocale(LC_ALL,"Russian");
char zaglavnye[] = "ABCDEFGHIKLMNOPQRSTUVWXYZ";
char propisnye[] = "abcdefghijklmnopqrstuvwxyz";
char chifry []= "0123456789";

printf ("Введите длину пароля = ");
scanf_s ("%d",&dlina);
char* parol = new char [dlina];
int* vybor = new int [dlina];
srand( (unsigned int)time( NULL ) );
for (int i = 0; i < dlina; i++)
{
	vybor[i] = 0 + rand()%3;
	printf("\n\n%d",vybor[i]);

		if(vybor[i] == 0)
		{
			parol [i] = zaglavnye[0 + rand()%26];
		}
		else
		{
			if(vybor[i] == 1)
			{
				parol[i] = propisnye[0 + rand()%26];
			}
			else
			{
				parol[i] = chifry[0 + rand()%10];
			}
		}	
}
parol [dlina+1] = 0;
printf("\n\nВаш пароль = %s",parol);
//int x = dlina;
//for (int j = 0; i < dlina;i--, x--)
//{
//	parol[j] = stroka[0] = parol%(pow(10,x)); //если пароль например пятизначный
//}
//FILE* f = fopen(parol, C:\*.txt);
char pass_buf[80] = "C:\\";
strcat(pass_buf, parol);
FILE* f = fopen(pass_buf, "w");
s = strlen(parol);
printf("\n\n%d",s);
getch();
}
Дырдин вне форума Ответить с цитированием
Старый 31.12.2009, 16:54   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Как это ни смешно, но ошибка в объявлении массива zaglavnye
Вы пропустили букву J, из-за чего общий размер массива стал меньше на 1 и с некой долей вероятности из него будет выбираться 0(последний элемент C-строки,"завершающий ноль"), который станет терминатором строки. Естественно, с ростом длины пароля растёт и эта вероятность. Ещё кое-что
Код:
char* parol = new char [dlina];
parol[dlina] - уже за пределами массива, а Вы пишете parol[dlina+1] = 0
Нужно так:
Код:
char* parol = new char[dlina+1]; // +1 для завершающего нуля
...
parol[dlina] = 0;
И вопрос, зачем Вы выделяете массив целых? Можно же обойтись одной единственной переменной
Код:
for(...)
{

   int vybor = rand() % 3;
   if(vybor == 3) ...
}

Последний раз редактировалось netrino; 31.12.2009 в 17:06.
netrino вне форума Ответить с цитированием
Старый 31.12.2009, 17:24   #3
Дырдин
Пользователь
 
Аватар для Дырдин
 
Регистрация: 26.09.2009
Сообщений: 81
По умолчанию

Хм.... Да... Невнимательность губит

Ещё один маленький вопрос. Я хочу чтобы пароль сохранялся в директории C:\\Password\

Пишет ошибку

Код:
char pass_buf[1000] = "C:\\Password\";
strcat(pass_buf, parol);
FILE* f = fopen(pass_buf, "w");

Как исправить?
Модераторр: пользуемся правкой

Последний раз редактировалось MaTBeu; 01.01.2010 в 20:09.
Дырдин вне форума Ответить с цитированием
Старый 31.12.2009, 17:44   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

В C, в строках, символ '\' означает эскейп-последовательность, то есть например \n - перевод строки, \r - возврат каретки, \" - кавычка в строках и т.д. Потому, чтобы отобразить сам символ '\' нужно писать '\\'.
Код:
char pass_buf[1000] = "C:\\Password\\";
Это будет переведено компилятором в "C:\Password\"
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генератор паролей artyomz JavaScript, Ajax 0 15.10.2009 19:01
Генератор паролей valerij Microsoft Office Excel 2 29.07.2009 14:08
Генератор паролей -=L.Morgan=- Помощь студентам 1 29.06.2009 03:04
Генератор паролей Dimixis Помощь студентам 2 03.07.2007 13:08