2

语句 A 和 B 是否相等?

int i;
char a[] = "Hello\n";
char b[100];    

声明 A,

for(i=0; b[i] != '\0'; ++i)
    b[i] = a[i];

声明 B,

for(i=0; (b[i] = a[i]) != '\0'; ++i)
      ;
4

3 回答 3

3

不,它们是不同的:

  • 第一个循环检查赋值b[i] 的值;
  • 第二个循环检查赋值b[i] 的值。

结果,第二个循环将复制ainto的内容b,并在复制后停止\0。第一个循环将在执行复制之前遇到第一个\0in时立即停止复制b,而忽略它可能在 中找到的任何零a

于 2013-04-15T10:35:33.813 回答
2

不,他们不是。

在语句 A 中,您b[i]在为其赋值之前进行检查

在第二个语句中,您在检查之前分配值。

第一个类似于while 循环,第二个类似于do-while 循环

于 2013-04-15T10:37:08.793 回答
0

不,他们不一样

在第二个你设置了b[i]值,然后你检查了!= '\0'

首先你已经检查了b[i] != '\0'之前设置它

我也可以给你建议:

int i = -1;
while(b[++i] = a[i]);
于 2013-04-15T10:36:01.520 回答