我正在尝试使用strncpy仅将字符串的一部分复制到C中的另一个字符串。
如:
c[] = "How the heck do I do this";
然后将"do this"
复制到另一个字符串,以便:
d[] = "do this"
非常感谢帮助。
答案 0 :(得分:10)
只需传递您要复制的第一个字母的地址:strcpy(dest, &c[13])
。
如果你想在字符串结束之前结束,请使用strncpy
或更好的memcpy
(不要忘记0终止复制的字符串)。
答案 1 :(得分:3)
strncpy
(基本上总是)是错误的选择。在这个特定的情况下,它会工作,但只是偶然 - 因为你复制字符串的结尾,它就像strcpy
一样工作。当然,这导致strcpy
也会起作用,但更容易。
如果你想处理一个更一般的案例,那就有一个相当令人惊讶(但非常有效)的选择:sprintf
可以完全按照你的意愿行事:
sprintf(d, "%s", c+20);
sprintf
(与strncpy
或strcpy
不同)也适用于最常见的情况 - 我们假设您只想将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'终止符。
在任何情况下,谨慎而明智地假设结果字符串有足够的空间,否则缓冲区溢出,因此请确保缓冲区中有足够的空间。