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.
magic2.c: In function 'spell_bone_armor':
magic2.c:244: warning: comparison with string literal results in unspecified behavior
I was wondering what is wrong with my if statement that is causing it to have a warning. I have this on a couple other spells also.