以下程序的输出为________
#include <string.h>
int main()
{
char ch[]="abc",x[3][4];
int i;
for(i=0;i<3;i++)
strcpy(x[i],ch);
for(i=0;i<3;i++)
printf("%s",&x[i][i]);
printf("\n");
}
答案是abcbcc
,但我认为答案应该是abc
,strcpy()
是用来把下面的复制到前面的,所以abc的第二行也是abc在第一行数组中的第三行。
a b c
a b c
a b c
然后输出对角线。
另一个谜题:为什么printf("%s",&x[i][i])
中有一个&
?我以为会是printf("%s",x[i][i])
。
1条答案
按热度按时间weylhg0b1#
答案是abcbcc,但我认为答案应该是abc。
答案是正确的。
在第一次迭代时,
i
的值为0。因此printf()
的调用为:其打印
abc
。然后
i
递增,第二次迭代打印bc
,第三次迭代打印c
。而且因为你没有打印一个换行符,所以所有3次迭代的输出都是连接在一起的。
为什么在printf(“%s”,&x[i][i])中有一个&?我以为应该是printf(“%s”,x[i][i])。
因为
%s
说明符需要一个以null结尾的字符串。而x[i][i]
的计算结果为char
。类型及其格式说明符不匹配将导致未定义的行为。