复制C中的字符串结尾

时间:2012-09-20 00:27:35

标签: c string copy strncpy

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

如:

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

然后将"do this"复制到另一个字符串,以便:

d[] = "do this"

非常感谢帮助。

4 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:3)

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

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

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

sprintf(与strncpystrcpy不同)也适用于最常见的情况 - 我们假设您只想将do I复制到d,但d以正确的NUL终止字符串形式出现:

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

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

答案 2 :(得分:0)

听起来你正在寻找strncpy功能。不要介意C ++站点,文档适用于C。

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

答案 3 :(得分:0)

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

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

在任何情况下,谨慎而明智地假设结果字符串有足够的空间,否则缓冲区溢出,因此请确保缓冲区中有足够的空间。