我正在尝试使用 strncpy 仅将字符串的一部分复制到 C 中的另一个字符串。
如:
c[] = "How the heck do I do this";
然后复制"do this"
到另一个字符串,这样:
d[] = "do this"
帮助表示赞赏。
只需传递您要复制的第一个字母的地址:strcpy(dest, &c[13])
.
如果您想在字符串结束之前结束,请使用strncpy
or,更好,memcpy
(不要忘记 0 终止复制的字符串)。
strncpy
是(基本上总是)错误的选择。在这种特定情况下,它会起作用,但只是偶然 - 因为您正在复制字符串的结尾,所以它会像strcpy
. 当然,这会导致它strcpy
也可以工作,但更容易。
如果您想处理更一般的情况,有一个相当令人惊讶(但非常有效)的选择:sprintf
可以完全按照您的意愿行事:
sprintf(d, "%s", c+20);
sprintf
(与strncpy
or不同strcpy
)也适用于最一般的情况——假设您只想复制do I
到d
,但已d
作为正确的 NUL 终止字符串出现:
sprintf(d, "%*s", 4, c+13);
这里,4
是要复制的部分的长度,c+13
是指向要复制的部分开头的指针。
听起来您正在寻找strncpy函数。不要介意 C++ 站点,文档是针对 C 的。
或者您也可以使用该strcpy
功能。
使用memcpy可能更合适,只能复制字符串的一部分。
使用 strncpy 或 strcpy 实际上将整个字符串复制到 '\0' 终止符。
无论如何,谨慎和明智的做法是假设结果字符串有足够的空间,否则缓冲区溢出,因此请确保缓冲区中有足够的空间。