Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.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
C 奇怪的while循环。困惑的_C - Fatal编程技术网

C 奇怪的while循环。困惑的

C 奇怪的while循环。困惑的,c,C,c编程新手。有人能帮我理解while循环在这个代码片段中做了什么吗?我从未见过这种类型的while循环 然而,我确实理解它在执行指针运算,但它实际上在说什么,用伪代码或简单的英语来解释呢?:) 表达式*d++=*s++实际上返回一个值。它将一直运行,直到找到一个字节:\0,当放入while条件时,该字节将为零,并将跳转到下一个语句:return语句。表达式*d++=*s++实际上返回一个值。它将一直运行,直到找到一个字节:\0,当放入while条件时,该字节将为零,并将跳转到下一个语句:retu

c编程新手。有人能帮我理解while循环在这个代码片段中做了什么吗?我从未见过这种类型的while循环

然而,我确实理解它在执行指针运算,但它实际上在说什么,用伪代码或简单的英语来解释呢?:)


表达式
*d++=*s++
实际上返回一个值。它将一直运行,直到找到一个字节:
\0
,当放入while条件时,该字节将为零,并将跳转到下一个语句:return语句。

表达式
*d++=*s++
实际上返回一个值。它将一直运行,直到找到一个字节:
\0
,当放入while条件时,该字节将为零,并将跳转到下一个语句:return语句。

在C中,值0表示false,任何其他表示true。字符串以值为0的空字符结尾。这个while循环将所有字符从s复制到d,直到达到null(字符串结尾)

赋值
*d++=*s++
返回的值与
*s++
赋值给
*d
的值相同


循环之后,
s
d
都将指向空字符之后。注意,空值也会被复制。

在C中,0表示false,其他任何值表示true。字符串以值为0的空字符结尾。这个while循环将所有字符从s复制到d,直到达到null(字符串结尾)

赋值
*d++=*s++
返回的值与
*s++
赋值给
*d
的值相同

循环之后,
s
d
都将指向空字符之后。请注意,空值也会被复制。

Psuedo代码:

if dest is not null initially:
    keep a pointer to the current character in "s" and "d".
    (copy step) copy the current character in "s" to the same position in "d"
    move the pointer to the next character in "d" and "s"
    if the character copied in "copy step" was not '\0' or null:
        jump back to "copy step"
    otherwise:
        break out of loop
Psuedo代码:

if dest is not null initially:
    keep a pointer to the current character in "s" and "d".
    (copy step) copy the current character in "s" to the same position in "d"
    move the pointer to the next character in "d" and "s"
    if the character copied in "copy step" was not '\0' or null:
        jump back to "copy step"
    otherwise:
        break out of loop


我认为这是将字符串从一个源复制到另一个源。这是一个又一个的过程。它在一条线上做了很多事情。它将*d设置为*s处的任何值,并将它们都递增到下一个字符。当它最终到达空字符(字符串的结尾)时,它返回它,导致while循环结束。你在k&r书中读过这个吗?最好通过调用
memcpy
来复制stringQuestions以寻求调试帮助(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中复制它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建一个最小的、完整的和可验证的示例。@self这可能不是OP的实现,可能只是他们看到的一个示例,需要帮助理解。我同意只使用
memcpy
会更容易,但我认为这更多的是试图掌握某些语法。编辑:也
strcpy
是一个thing@ChrisSprague确切地这不是我的密码。我只是试图掌握语法,这对我来说是陌生的。我相信这是将字符串从一个源复制到另一个源。这是一个又一个的过程。它在一条线上做了很多事情。它将*d设置为*s处的任何值,并将它们都递增到下一个字符。当它最终到达空字符(字符串的结尾)时,它返回它,导致while循环结束。你在k&r书中读过这个吗?最好通过调用
memcpy
来复制stringQuestions以寻求调试帮助(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中复制它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参见:如何创建一个最小、完整和可验证的示例。@self这可能不是OP的实现,它可能只是他们看到的一个示例,希望得到帮助理解。我同意只使用
memcpy
会更容易,但我认为这更多的是试图掌握某些语法。编辑:也
strcpy
是一个thing@ChrisSprague确切地这不是我的密码。我只是试图掌握语法,这对我来说是陌生的。所以这也是一个赋值操作?是的,函数在堆上复制输入字符串并返回指向新字符串的指针。调用方必须记住释放它,否则它会泄漏。所以这也是一个赋值操作?是的,函数正在堆上复制输入字符串并返回指向该新字符串的指针。调用者必须记住释放它,否则它将泄漏。请更正,除非指针
s
d
被移动到下一个字符,即使复制的字符是
'\0'
(尽管循环在之后结束)。。。除非编译器决定跳过最后一个增量,否则我想。@Dmitri P.S.如果我们讨论的是编译器将对代码做什么,这个答案会有很大不同;)正确,但指针
s
d
移动到下一个字符,即使复制的字符是
'\0'
(尽管循环在之后结束)。。。除非编译器决定跳过最后一个增量,否则我想。@Dmitri P.S.如果我们讨论的是编译器将对代码做什么,这个答案会有很大不同;)