The comparison method you are using checks the memory address of what the variables point to, NOT a literal string interpretation. So it will definitely not work because skill_table[sn].name and a string you made, "bone armor", do not point to the same memory address. What you want to do is use a string comparison function, like strcmp().
Example: if ((!strcmp(skill_table[sn].name, "bone armor")) && (ch->pcdata->learned[sn] > 99))
strcmp returns a 0 (false) value if both strings are the same, thus the ! to turn it 'true' in this instance. Keep in mind strcmp is case-sensitive.