7

我正在尝试使用 strncpy 仅将字符串的一部分复制到 C 中的另一个字符串。

如:

c[] = "How the heck do I do this";

然后复制"do this"到另一个字符串,这样:

d[] = "do this"

帮助表示赞赏。

4

4 回答 4

12

只需传递您要复制的第一个字母的地址:strcpy(dest, &c[13]).

如果您想在字符串结束之前结束,请使用strncpyor,更好,memcpy(不要忘记 0 终止复制的字符串)。

于 2012-09-20T00:29:53.897 回答
4

strncpy是(基本上总是)错误的选择。在这种特定情况下,它会起作用,但只是偶然 - 因为您正在复制字符串的结尾,所以它会像strcpy. 当然,这会导致它strcpy也可以工作,但更容易。

如果您想处理更一般的情况,有一个相当令人惊讶(但非常有效)的选择:sprintf可以完全按照您的意愿行事:

sprintf(d, "%s", c+20);

sprintf(与strncpyor不同strcpy)也适用于最一般的情况——假设您只想复制do Id,但已d作为正确的 NUL 终止字符串出现:

sprintf(d, "%*s", 4, c+13);

这里,4是要复制的部分的长度,c+13是指向要复制的部分开头的指针。

于 2012-09-20T00:50:36.350 回答
0

听起来您正在寻找strncpy函数。不要介意 C++ 站点,文档是针对 C 的。

或者您也可以使用该strcpy功能。

于 2012-09-20T00:30:16.017 回答
0

使用memcpy可能更合适,只能复制字符串的一部分。

使用 strncpy 或 strcpy 实际上将整个字符串复制到 '\0' 终止符。

无论如何,谨慎和明智的做法是假设结果字符串有足够的空间,否则缓冲区溢出,因此请确保缓冲区中有足够的空间。

于 2012-09-20T00:36:25.027 回答