以下两个功能是否相同?如果没有,为什么不呢?

Ako*_*agy 0 c string pointers function char

void s1(char dest[], char src[])
{
    int i=0;
    while(dest[i++]=src[i++]);
}

void s2(char * dest, char *src)
{
    while(*dest++=*src++);
}
Run Code Online (Sandbox Code Playgroud)

另外,请注意我从一本书中解决了这个问题,并且不知道代码是否正确(我认为在while循环中应该有两个'=')

Kla*_*äck 5

第二个代码执行字符串复制.它相当于strcpy().

第一个代码具有未定义的行为,因为它i在一个语句中更新两次而没有插入序列点.

所以答案是它们不一样.

第一个代码可以更正.例如这样:

void s1(char dest[], char src[])
{
    int i=0;
    while(dest[i]=src[i]) i++;
}
Run Code Online (Sandbox Code Playgroud)