字符串的一部分可以复制到C中的另一个字符串吗?但复制的开始索引不为零[关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串的一部分可以复制到C中的另一个字符串吗?但复制的开始索引不为零[关闭]相关的知识,希望对你有一定的参考价值。
例如,我有这个字符串:
ABABcct
我可以复制吗?
ABc
begin index = 2, end index = 4
......从那个字符串?
是否有任何特定的内置功能可以做到这一点?
我知道strncpy()
可以从字符串的开头复制一个字符串的多个字符到另一个字符串。但我认为它不能做我刚才描述的事情。据我所知,它的“开始索引”仅限于0。
答案
实际上你可以使用函数strncpy()
和一个指向字符串中任何位置的指针,而不仅仅是指向它开头的指针。
例:
char *src = strdup("ABABcct");
char *dest;
strncpy(dest, src + 2, 3) // Copies 3 characters from your pointer src + 2 to your pointer dest
如果您运行此代码,dest
将包含ABc
。
另一答案
虽然在您的情况下标准复制功能最终会起作用,但在源和目标重叠时不允许使用它们,在这种情况下您将体验UB。
对于这样的问题,标准C库提供了设计用于处理重叠区域的功能memmove
。它的工作原理是使用中间缓冲区来解决任何重叠问题。
另见Meaning of overlapping when using memcpy
另一答案
随着strncpy
#include <stdio.h>
#include <string.h>
int main(void)
{
char p[10],s[10]="abcdefgh";
strncpy(p,s+2,3);
puts(p);
return 0;
}
I know strncpy()
... As far as I know, its "begin index" (as I call it) is limited to 0.
你知道错了。这不是关于开始索引或任何东西 - 只需要在char*
和src
中传递相关的target
,这是在这里完成的。
为了进一步说明 - 您正在讨论的大多数标准库函数从未设置将指针传递给第0个索引的约束。你发送哪个索引并不重要 - 你可以发送100或50并不重要,只要它遵循函数预期的事情(null终止等)。
此处发布的代码仅用于说明目的 - 不包括使用str*cpy
函数所需的必要检查。
以上是关于字符串的一部分可以复制到C中的另一个字符串吗?但复制的开始索引不为零[关闭]的主要内容,如果未能解决你的问题,请参考以下文章