为什么答案是“abcbcc”?

6pp0gazn  于 2023-02-07  发布在  其他
关注(0)|答案(1)|浏览(130)

以下程序的输出为________

#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,但我认为答案应该是abcstrcpy()是用来把下面的复制到前面的,所以abc的第二行也是abc在第一行数组中的第三行。

a b c
a b c
a b c

然后输出对角线。
另一个谜题:为什么printf("%s",&x[i][i])中有一个&?我以为会是printf("%s",x[i][i])

weylhg0b

weylhg0b1#

答案是abcbcc,但我认为答案应该是abc。
答案是正确的。

for(i=0;i<3;i++) 
      printf("%s",&x[i][i]);
  printf("\n");

在第一次迭代时,i的值为0。因此printf()的调用为:

printf("%s",&x[0][0]);

其打印abc
然后i递增,第二次迭代打印bc,第三次迭代打印c
而且因为你没有打印一个换行符,所以所有3次迭代的输出都是连接在一起的。
为什么在printf(“%s”,&x[i][i])中有一个&?我以为应该是printf(“%s”,x[i][i])。
因为%s说明符需要一个以null结尾的字符串。而x[i][i]的计算结果为char。类型及其格式说明符不匹配将导致未定义的行为。

相关问题