سلام.
تابع strcpy مدتهاست که deprecate شده (برای دیدن لیست توابع CRT منقضی شده، به این آدرس رجوع کنید). شما باید از strcpy_s که نسخه ایمن اون تابع هستش استفاده کنید (برای اطلاعات بیشتر به نوشته های Brian Sullivan و Michael Howard در مورد SDL مراجعه کنید).
مشکل دوم کد شما اینه که فرض کرده اید برنامه شما همواره در شرایط MBCS کامپایل میشه. خوب، سالهاست که دیگه نباید این فرض رو کرد. بنابراین بهتره همواره جای char (یا دیگر متغیر های مربوطه) از نسخه T ی اونها (مثل TCHAR) استفاده کنید تا در صورت نیاز بشه برنامه رو با تغییر یکی دو سوئیچ هنگام کامپایل بصورت Unicode کامپایل کرد.
مشکل سوم این کد، عدم استفاده از Initializer هاست. شما براحتی میتونستید آرایه مورد نظر رو بدین شکل پر کنید:
char famil[20][50] = {"Name1", "Name2", "Name3", "Name4", "Name5", "Name6"};
مشکل بعدی، توی این خطه:
printf("Family Student : %c",&famil[2]);
اینجا اون عدد 2 به چه معناست و هدفتون چی بوده؟ اگر میخواستید Family Name رو چاپ کنید، چرا از %s استفاده نکرده اید و & رو از جلوی نام متغیر حذف نکرده اید:
printf("Family Student : %s", famil[2]);
در نهایت، شما نباید بدون Validate کرده User Entry به این سادگی به اندیس دوم famil دسترسی پیدا کنید. ابتدا باید مطمئن بشید که حداقل 3 تا famil دارید، سپس به خونه 2 (منظورم Zero-Based هستش) دسترسی پیدا کنید. اگر هم مطمئنید که حداقل سه عنصر در آراه همواره خواهید داشت، باید این مساله رو با آوردن assert در کد نشون بدید.
موفق باشید.