Пример использования массива указателей

K&R (124). Массив months представляет собой массив указателей на первые символы строк. Например, months[3] содержит адрес на символ 'M', который можно получить так: *months[3].

Функция month_name возвращает указатель на первый символ строки. Но как ее получить всю по данному адресу? Ее можно считать в строку (массив символов), инкреминируя указатель, или просто посимвольно вывести на экран. Самый простой способ - это указать формат вывода "строка" (%s) для указателя на первый символ.

#include <stdio.h>
 
char *month_name (int n);
 
main () {
	int m, i;
	char *ch;
	char str[20];
// 1 ---------------------------------------------
	scanf("%d", &m);
	ch = month_name(m);
	i = 0;
	while (*ch != '\0') {
		str[i] = *ch;
		ch++;
		i++;
	}
	str[i] = '\0';
	printf("%s\n", str);
// 2 ---------------------------------------------
	scanf ("%d", &m);
	ch = month_name(m);
	while (*ch != '\0')
		printf("%c", *ch++);
	printf("\n");
// 3 --------------------------------------------
	scanf ("%d", &m);
	ch = month_name(m);
	printf ("%s\n", ch);
}
 
char *month_name (int n) {
	static char *months[] = {
		"Illegal month",
		"January", "February", "March",
		"April", "May", "June",
		"July", "August", "September",
		"October", "November", "December"
	};
 
	return (n < 1 || n > 12) ? months[0] : months[n];
}

Создано