Есть несколько проблем, с кодом, как писал, но давайте начнем с этого:
char * main_pointer;
Это всегда плохая вещь, чтобы сделать, это оставляет «main_pointer», как неинициализированным. Ваш компилятор должен был сказать вам это.
test.c: In function ‘main’: test.c:12:7: warning: ‘main_pointer’ is used uninitialized in this function [-Wuninitialized]
Если вы используете GCC, а затем добавить опцию компилятора «-Wall», чтобы получить более диагностический выход, и всегда пытаются присвоить значение по умолчанию для ваших переменных, например
char * main_pointer = NULL;
Следующая проблема:
char * random_name(char * MAIN_POINTER)
....
MAIN_POINTER = &random[x][0];
Хотя это законно, я не думаю, что это то, что вы ожидаете. Когда вы передаете указатели как аргументы функции, подобные этому, адрес указатель указывает на переданный и хранится в новой переменной указателя. Любые внесенные изменения сделаны в эту новую копию, и когда функция возвращается, они теряются.
char* test(char* in)
{
in = in + 1;
return in + 10;
}
....
char* p = (char*)1000; // 'p' now points to memory location 1000.
char* q = test(p);
printf("p = %p, q = %q\n", p, q);
Напечатает:
1000 1011
По существу, указатели работают так же, как переменные, в данном случае «в» была инициализирована в то же значение, как «р», адрес «1000», когда мы добавлено 1 к нему, была изменена только приватная переменная «in».
Единственная особенность указателя заключается в том, что вы можете «разыменовать» его. Если вы хотите вашу функцию «random_name», чтобы иметь возможность изменить указатель main_pointer, вам нужно будет передать адрес указателя и разыменования, что:
void random_name(char** main_pointer) // address of the pointer
{
...
(*main_pointer) = random[x];
}
Поскольку вызов random_name отсутствует из вашего кода, я не могу сказать, если вы ожидали получить это следующим образом:
main_pointer = random_name(main_pointer);
не кажется, как много точки передавая ее функции в этом случае, так как вы никогда не использовать его.
Еще одна проблема, с которой ваш код столкнется, заключается в том, что вы пытаетесь использовать указатель на данные для подъема из области действия функции над чем-то над ней в стеке. Это опасно. Если вам нужны данные для сохранения или видимости вне функции, ее необходимо либо объявить в глобальной области, либо задать атрибут «статический».
const char* random_names[] = { "0Sam", "1Sam", "2Sam", ... };
// or
void random_name(const char** main_pointer)
{
size_t x = random(0, 7);
static const char* random_names[] = { "0Sam", "1Sam", "2Sam", ... };
(*main_pointer) = random_names[x];
}
Ваш код не вызывает вашу функцию в 'main', так что вам нужно исправить код, чтобы соответствовать выходной. – Gabe