Снова проблемы с charom :(

Есть вот такой простой код:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctime>
#include <locale.h>
struct Student
{
    int amount_of_debts;
    char name[50];
    char surname[50];
    char faculty[10];
    char group[10];
    char patronymic[50];
};
char* get_random_name()
{
    char NAMES[10][50] = { "Тимофей", "Марк", "Артём", "Леонид", "Илья", 
                           "Олег", "Матвей", "Глеб", "Кирилл", "Владимир"};
    return NAMES[rand()%10];
}
char* get_random_surname()
{
    char SURNAMES[10][50] = { "Горюнов", "Гуляев", "Дементьев", "Звягинцев", "Исаков",
                           "Кожевников", "Никитин", "Орлов", "Островский", "Ульянов" };
    return SURNAMES[rand() % 10];
}
int main()
{
    srand((unsigned int)time(NULL));
    setlocale(LC_ALL, "rus");
    char buf[50];
    strcpy_s(buf, get_random_name());
    printf_s("%s", buf);
    system("pause");
    return 0;
}

Почему-то вывод в консоль то работает, то нет. Я ожидаю увидеть случайное имя из массива NAMES,иногда выводит правильно, иногда выводит какой-то случайный набор символов, иногда просто крашится и пишет что-то типа Buffer is too small, эта ошибка возникает в 81 строчке кода вот в этом файле corecrt_internal_string_templates.h Подскажите пожалуйста, как это можно пофиксить? Заранее спасибо.


Ответы (1 шт):

Автор решения: Harry

Возврат указателя на локальный массив.

Попробуйте

static char NAMES[10][50] = { "Тимофей", "Марк", "Артём", "Леонид", "Илья", 

и

static char SURNAMES[10][50] = { "Горюнов", "Гуляев", "Дементьев", "Звягинцев", "Исаков",
→ Ссылка