如何strcpy和返回复制字符的数量?

gex*_*ide 7 c++ string strlen strcpy

我想将一个以null结尾的字符串复制到另一个位置,并想知道复制的字符串有多长.效率至关重要.有一个strcpy功能可以实现这一点,但它不会返回实际复制的字符数.

当然,我可以通过简单地调用strlen后来检测复制字符串的长度来找到它,但这意味着第二次再次遍历字符串中的字符,尽管strcpy必须跟踪它复制的字符数.出于性能原因,我不想进行这样的第二次遍历.

我知道strcpy使用简单的char-by-char副本编写自己很容易,但我认为标准库可能会应用魔法,这strcpy比使用简单的char-by-char实现更快.

那么,在strcpy没有再次遍历字符串的情况下,获取复制字符数的最佳方法是什么?

Zby*_*000 9

许多系统支持stpcpy返回指向目标末尾的指针.您可以减去原始目标指针,这样您就可以获得长度.


Fan*_*Fox 3

如果您确实需要这个,那么编写自己的代码将非常容易:

unsigned int lenstrcpy(char dest[], const char source[]) {
    unsigned int i = 0;
    while ((dest[i] = source[i]) != '\0') {
       i++;
    }
    return i; 
}
Run Code Online (Sandbox Code Playgroud)

这是一个活生生的例子。

  • 目前尚不清楚这是否会比使用“strcpy()”和“strlen()”更快,因为这些函数针对目标平台进行了优化。 (4认同)