|
发表于 2023-4-26 22:20:35
|
显示全部楼层
本楼为最佳答案
当然可以。让我们逐个分析这4段代码:
A.
- while ( *t )
- *s++ = *t++;
复制代码
这段代码在 `*t`(源字符串的当前字符)不为零(即非空字符)时继续循环。循环体将 `*t` 复制到 `*s`,并将 `s` 和 `t` 的指针递增。但是,这段代码不会处理终止的空字符,因此它并不等价于 `while( *s++ = *t++ );`。
B.
- do {
- *s = *t++;
- } while ( *s++ );
复制代码
这段代码首先将 `*t` 复制到 `*s`,然后将 `t` 的指针递增。接下来,如果 `*s` 不为零,循环会继续,并将 `s` 的指针递增。这段代码确实处理了终止的空字符,与 `while( *s++ = *t++ );` 等价。
C.
- while ( *s )
- *s++ = *t++;
复制代码
这段代码在 `*s`(目标字符串的当前字符)不为零时继续循环。这会导致问题,因为我们不能保证目标字符串初始时就有一个空字符。因此,这段代码不等价于 `while( *s++ = *t++ );`。
D.
- do {
- *s++ = *t++;
- } while ( *t );
复制代码
这段代码首先将 `*t` 复制到 `*s`,然后将 `s` 和 `t` 的指针递增。接下来,如果 `*t` 不为零,循环会继续。这段代码没有处理终止的空字符,因此它也不等价于 `while( *s++ = *t++ );`。
虽然这些代码段看起来很相似,但只有选项B正确处理了字符串的结束,并确保了源字符串(包括空字符)被完全复制到目标字符串。因此,选项B与 `while( *s++ = *t++ );` 等价。 |
|