字符串的一部分可以复制到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中的另一个字符串吗?但复制的开始索引不为零[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件复制到另一个路径?

将指针的值复制到 Assembly 中的另一个新指针

您可以从 github 存储库中的另一个目录导入 python 模块吗? [复制]

将字符串从main复制到结构c

您可以将字符串附加到 PHP 中的变量吗? [复制]

为啥一个空数组等于一个空字符串,而不是 javascript 中的另一个空数组? [复制]