Каждый элемент (одномерный массив типа char[MAX_I]
) двумерного массива
char names[MAX_I][MAX_J] = {"Foo", "Bar", "Baz"};
, который не был явно инициализирован, неявно инициализируется как
{ '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0' }
где число нф равно MAX_I
. Таким образом, на самом деле, неявно инициализированные элементы содержат пустые c -строки.
Итак, oop, который выводит явно инициализированные элементы массива, может выглядеть, например, следующим образом
for ( size_t i = 0; i < MAX_I && *names[i]; i++ )
{
std::cout << names[i] << '\n';
}
или
for ( size_t i = 0; i < MAX_I && names[i][0] != '\0'; i++ )
{
std::cout << names[i] << '\n';
}
Или, если это программа C, то
for ( size_t i = 0; i < MAX_I && *names[i]; i++ )
{
puts( names[i] );
}
или
for ( size_t i = 0; i < MAX_I && names[i][0] != '\0'; i++ )
{
puts( names[i] )
}
Если среди строк могут присутствовать пустые строки непустые строки, тогда l oop может выглядеть как
for ( size_t i = 0; i < MAX_I; i++ )
{
if ( *names[i] ) puts( names[i] );
}
или
for ( size_t i = 0; i < MAX_I; i++ )
{
if ( names[i][0] != '\0' ) puts( names[i] );
}
Или если использовать l-1035 *, основанный на диапазоне, то как показано в демонстрационной программе
#include <iostream>
#define MAX_I 20
#define MAX_J 20
int main()
{
char names[MAX_I][MAX_J] = {"Foo", "Bar", "Baz"};
for ( const char *s : names )
{
if ( *s ) std::cout << s << '\n';
}
return 0;
}