为什么strcpy没有给出源数组的长度?

问题描述 投票:0回答:1

我假设strcpy使用一些方法进行优化。但为什么它没有提供一些有关长度的信息?

我的意思是 strcpy 必须有办法获取 src 数组的长度,对吗?所以,如果你想知道你复制的字符串的长度,你必须再次调用strlen,何必呢?而strcpy的返回值是指向dst数组的指针,我认为这是一个无用的信息!我不需要知道 dst 指针,因为我只是将它传递给你!

有什么我错过的吗?好困惑。

c crt
1个回答
0
投票

标准库的 strcpy() 很可能不会返回字符串长度,因为它可以在不知道字符串长度的情况下完成这项工作。下面显示的算法对于许多编译器来说都很常见。请注意,它只是复制字符,直到遇到源字符串的终止 NUL (' ')。它既不需要也不关心字符串长度:

#include <stdio.h>

//Common Algorithm for strcpy()
char * strcpy (char * dst, char * src)
{
    char * cp = dst;
    while( *cp++ = *src++ )
        ;           /* Copy src over dst */
    return( dst );
}

int main()
{
char b1[]="Hello World.";
char b2[sizeof(b1)];

    strcpy(b2, b1);
    printf("%s\n", b2);
    
    return 0;
}

输出:

    Hello World.```

Runnable code [here](https://godbolt.org/z/cT56zrfcf)
© www.soinside.com 2019 - 2024. All rights reserved.