Node:String arrays, Next:String library functions, Previous:Initializing strings, Up:Strings
Suppose you want to print out a screenful of text instead of a single line.
You could use one long character array, interspersed with
\n
characters where you want the lines to break, but you might
find it easier to use a string array. A string array is an array
of strings, which, of course, are themselves arrays of characters; in
effect, a string array is a two-dimensional character array.
Just as there are easy methods of initializing integer arrays, float
arrays, strings, and so on, there is also an easy way of initializing
string arrays. For example, here is a sample program which prints out a
menu for a full application program. That's all it does, but you might
imagine that when the user chooses 3
in the full program, the
application invokes the function calculate_bill
we examined
earlier. (See Parameters.)
#include <stdio.h> char *menu[] = { " -------------------------------------- ", " | ++ MENU ++ |", " | ~~~~~~~~~~~~ |", " | (0) Edit Preferences |", " | (1) Print Charge Sheet |", " | (2) Print Log Sheet |", " | (3) Calculate Bill |", " | (q) Quit |", " | |", " | |", " | Please enter choice below. |", " | |", " -------------------------------------- " }; int main() { int line_num; for (line_num = 0; line_num < 13; line_num++) { printf ("%s\n", menu[line_num]); } return 0; }
Notice that the string array menu
is declared char
*menu[]
. This method of defining a two-dimensional string array is a
combination of methods 1 and 2 for initializing strings from the last
section. (See Initializing strings.) This is the most convenient
method; if you try to define menu
with char menu[][]
, the
compiler will return an "unspecified bounds error". You can get around
this by declaring the second subscript of menu
explicitly
(e.g. char menu[][80]
), but that necessitates you know the
maximum length of the strings you are storing in the array, which is
something you may not know and that it may be tedious to find out.
The elements of menu
are initialized with string constants in the
same way that an integer array, for example, is initialized with
integers, separating each element with a comma. (See Initializing arrays.)