Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于TCPL中的strcpy()_C_Strcpy - Fatal编程技术网

关于TCPL中的strcpy()

关于TCPL中的strcpy(),c,strcpy,C,Strcpy,我正在阅读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”进行比较。在这种情况下,循环的终止是如何工作的。赋值语句的值就是指定的值。因此,它将检查分配的值是否为0('\0

我正在阅读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”进行比较。在这种情况下,循环的终止是如何工作的。赋值语句的值就是指定的值。因此,它将检查分配的值是否为
0
'\0'
),这是此处需要完成的操作

等价地,这段代码归结为(这就是它的工作方式)。这样想吧——至少复制一次。所以它向我们展示了它将是一个
do-while
循环

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

(*s++ = *t++) != 0
(*s++ = *t++) != '\0'
这相当于

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

在C中,
if(var=expression)
表示1)将表达式赋值给var,然后2)检查var的计算结果是否为TRUE。这同样适用于
while(var=expression)

,因此正如作者所说,这只是一种“习惯用法”@1MinLeft-Yes[15个字符]C语言的设计基本上就是为了生成这种类型的代码。