In fact your declaration of the array table is equivalent to the following declaration
char table[2][3][2] = { { { 'A', 'A' }, , { 'A', 'A' },, { '\0', '\0' } },
{ { 'A', 'A' }, { 'b', '\0' }, { '\0', '\0' } } };
As you can see not all elements of sub arrays table[i][j] where i and j some indices contain strings. Thus to output an element of such sub arrays you should specify exactly how many characters you are going to output. You can do that the following way
printf( "%*.*s\n", 2, 2, table[0][0] );
Here is a more complete example
char table[2][3][2] = { {"AA","AA",""}, {"aA","b",""} };
for ( size_t i = 0; i < 2; i++ )
{
for ( size_t j = 0; j < 3; j++ ) printf( "%*.*s ", 2, 2, table[i][j] );
printf( "\n" );
}
The program output is
4
AA AA
aA b
However it would be much better if the array contained strings that is that there was rooms for the terminating zeroes.
For example C++ does not allow such definition of character arrays when there is no room for the terminating zero when an array is initialized by a string literal. The compiler will issue an array.
Thus declare the array the following way
char table[2][3][3] = { {"AA","AA",""}, {"aA","b",""} };
^^^^^
Take into account that the function main without parameters shall be defined in C like
int main( void )