【问题标题】:About strcpy() in TCPL [duplicate]关于 TCPL 中的 strcpy() [重复]
【发布时间】:2018-06-08 14:48:39
【问题描述】:

我正在阅读 C 编程语言,当它到达 字符指针和函数 (5.5) 时,我遇到了问题。

5.5中,作者展示了strcpy() 的四个版本。我的问题在于版本 3:

/*strcpy: copy t to s; pointer version 3*/
void strcpy(char *s, char *t)
{
    while (*s++ = *t++)
        ;
}

无法与“\0”进行比较。在这样的条件下,循环的终止又是如何工作的呢?

【问题讨论】:

  • C 语言几乎就是为制作这种类型的代码而设计的。

标签: c strcpy


【解决方案1】:

有。赋值语句的值是赋值的值。因此它将检查分配的值是否为0 ('\0'),这是预期在此处完成的。

等效地,这段代码归结为(这就是它的工作方式)。像这样想 - 至少一旦副本会发生。所以它告诉我们这将是一个do-while 循环。

char somechar;
do {
   somechar = *t;
   *s = somechar ;
   s++;
   t++;
} while( somechar );

【讨论】:

    【解决方案2】:

    在 C 中,if (var = expression) 表示 1) 将 expression 分配给 var,然后 2) 检查 var 的计算结果是否为 TRUE while (var = expression) 也是如此。

    【讨论】:

      【解决方案3】:
      *s++ = *t++
      

      等价于

      (*s++ = *t++) != 0
      

      相当于

      (*s++ = *t++) != '\0'
      

      【讨论】:

      • 如作者所说,这只是一个“成语”?
      • @1MinLeft 是 [15 个字符]
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 2015-09-16
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      相关资源
      最近更新 更多