char t[] = {'a','b','$'};
char nt[] = {'S','A'};
char table[2][3][2] = { {"AA","AA",""}, {"aA","b",""} };
void main(){
printf("%s",table[0][0]);
}
输出:
AAAA
输出应为AA
,有人可以帮我解决,无法弄清楚问题。
答案 0 :(得分:1)
您的数组没有空终止符的空间。 table
的最右侧维度必须至少为3才能将元素用作C字符串。您现在正在访问数组的越界(使用%s
中的printf()
打印时)undefined behaviour。
char table[2][3][3] = ...
如果要使用更长的字符串文字,请同样调整长度。
顺便说一下,void main()
不是main()
的标准签名。使用int main(void)
或类似内容。
答案 1 :(得分:0)
实际上,您对数组表的声明等同于以下声明
char table[2][3][2] = { { { 'A', 'A' }, , { 'A', 'A' },, { '\0', '\0' } },
{ { 'A', 'A' }, { 'b', '\0' }, { '\0', '\0' } } };
你可以看到不是子数组的所有元素table [i] [j]其中i和j一些索引包含字符串。因此,要输出此类子数组的元素,您应该准确指定要输出的字符数。您可以通过以下方式执行此操作
printf( "%*.*s\n", 2, 2, table[0][0] );
这是一个更完整的例子
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" );
}
程序输出
4
AA AA
aA b
然而,如果数组包含的字符串是终止零的空间会更好。
例如,当字符串文字初始化数组时,如果终止零没有空间,则C ++不允许这样定义字符数组。编译器将发出一个数组。
从而以下列方式声明数组
char table[2][3][3] = { {"AA","AA",""}, {"aA","b",""} };
^^^^^
考虑到无参数的函数main应在C中定义,如
int main( void )