How about:
char *m[MONTHS] = {"", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
int i;
printf("%s%13s\n", "Input", "output");
for(i=1 ; i<xMONTHS ; i++){
printf("%7d%13s\n", i, m[i]);
}
1. In simple terms a string is a pointer to a char (OK I know that oversimplifies it, but the idea's roughly right) - so you need to get your declaration of 'm' right.
2. Arrays are zero based - so to use indices 1 to 12, you need the zero'th element as a dummy.
3. Your format strings need to reflect the fact that you are trying to print an integer and a string - not 2 chars.
4. You can't just print 'm' - you need to specify the element of the array.
5. New line characters in the format strings will make your output more readable - they need to be explicit and are not implied.
6. You might usefully get hold of a copy of Kernighan & Ritchie (
http://en.wikipedia.org/wiki/The_C_Programming_Language[
^]) which (at least when I got it) was the Bible for learning C (and any C-like) language.
7. Depending on your development environment you might also consider ditching functions like printf for the string safe counterparts like StringCchPrintf (
http://msdn.microsoft.com/en-us/library/ms647466(VS.85).aspx[
^]) that offer some protection against ubiquitous buffer overrun bugs beloved of hackers!