Войти

Показать полную графическую версию : [решено] gcc ругается на адреса & в функции


kennydzzze
10-04-2016, 11:43
Пишу на Си в linuxe, компилирую код с помощью gcc. Компилятор ругается на адреса в функции.


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void default_optionsFunction(int &password_lenght, int &number_of_passwords, char **password_generation)
{
srand(time(NULL));

password_lenght=10; // Длина пароля
number_of_passwords=1; // Количество паролей
const int lower_case=1; // Подключение нижнего регистра
const int capital_letters=1; // Подключение верхнего регистра
int symbolType=NULL; // Тип символов

int variants_of_symbols = password_lenght/(lower_case + capital_letters); // Формула вычисления количества используемых символов каждого типа

// Выделение памяти для паролей
int result=NULL; // Переменная (генерация необходимого количества паролей)
int symbol=NULL; // Переменная (индекс символа)
password_generation = (char **)malloc(number_of_passwords*sizeof(char *));
for (result=0; result < number_of_passwords; result++)
{
password_generation[result] = (char*)malloc(password_lenght*sizeof(char));
}

// Генерация паролей
result=0;
while (result < number_of_passwords)
{
int lower_caseType=0; // Переменная (необходима для границ генерации символов нижнего регистра)
int capital_lettersType=0; // Переменная (необходима для границ генерации символов верхнего регистра)

for (symbol=0; symbol < password_lenght; )
{
if (symbol == password_lenght)
{
password_generation[result][symbol] = '\0';
break;
}

symbolType = rand()%2+1;

// Заполнение пароля нижним регистром
if (symbolType == 1)
{
if (lower_caseType > variants_of_symbols) continue;
if (lower_caseType < variants_of_symbols)
{
password_generation[result][symbol] = rand()%26+97;
lower_caseType++;
symbol++;
}
}

// Заполнение пароля верхним регистром
if (symbolType == 2)
{
if (capital_lettersType > variants_of_symbols) continue;
if (capital_lettersType < variants_of_symbols)
{
password_generation[result][symbol] = rand()%26+65;
capital_lettersType++;
symbol++;
}
}
}

puts(password_generation[result]);
result++;

}

return;
}
int main()
{
int a=10, b=1;
char **c;

default_optionsFunction(a, b, c);

return 0;
}


http://clip2net.com/clip/m405748/d18c7-clip-17kb.png

В чем может быть проблема?

mrcnn
10-04-2016, 13:48
Попробуйте исполльзовать g++ для компиляции

kennydzzze
10-04-2016, 14:15
mrcnn, Выбор компилятора не от меня зависит, учебное заведение не разрешает пока что писать на с++ и использовать g++.

mrcnn
10-04-2016, 14:26
Тогда обращайтесь по указателю
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void default_optionsFunction(int* password_lenght, int* number_of_passwords, char **password_generation)
{
srand(time(NULL));
*password_lenght=10; // Длина пароля
*number_of_passwords=1; // Количество паролей
const int lower_case=1; // Подключение нижнего регистра
const int capital_letters=1; // Подключение верхнего регистра
int symbolType=NULL; // Тип символов
int variants_of_symbols = (*password_lenght)/(lower_case + capital_letters); // Формула вычисления количества используемых символов каждого типа // Выделение памяти для паролей
int result=NULL; // Переменная (генерация необходимого количества паролей)
int symbol=NULL; // Переменная (индекс символа)
password_generation = (char **)malloc((*number_of_passwords)*sizeof(char *));
for (result=0; result < (*number_of_passwords); result++)
{
password_generation[result] = (char*)malloc((*password_lenght)*sizeof(char));
}
// Генерация паролей
result=0;
while (result < (*number_of_passwords))
{
int lower_caseType=0;
// Переменная (необходима для границ генерации символов нижнего регистра)
int capital_lettersType=0;
// Переменная (необходима для границ генерации символов верхнего регистра)
for (symbol=0; symbol < (*password_lenght); )
{
if (symbol == (*password_lenght))
{
password_generation[result][symbol] = '\0';
break; }
symbolType = rand()%2+1;
// Заполнение пароля нижним регистром
if (symbolType == 1)
{
if (lower_caseType > variants_of_symbols) continue;
if (lower_caseType < variants_of_symbols)
{
password_generation[result][symbol] = rand()%26+97;
lower_caseType++;
symbol++;
} }
// Заполнение пароля верхним регистром
if (symbolType == 2)
{
if (capital_lettersType > variants_of_symbols)
continue;
if (capital_lettersType < variants_of_symbols)
{
password_generation[result][symbol] = rand()%26+65;
capital_lettersType++;
symbol++;
}
}
}
puts(password_generation[result]);
result++;
}
return;
}

int main()
{
int a=10, b=1;
char **c;
default_optionsFunction(&a, &b, c);
return 0;
}

kennydzzze
10-04-2016, 14:45
mrcnn, спасибо, помогло.

kennydzzze
11-04-2016, 07:24
del

Iska
11-04-2016, 08:38
Чтобы тему новую не создавать, »
Это против Правил.




© OSzone.net 2001-2012