如何将char[41]转换为char[40]

How to convert char[41] to char[40]

本文关键字:char 转换      更新时间:2023-10-16

通常我做strcpy,但这里看起来我无法将较大的数组复制到较小的数组。我知道我需要跳过一个数组元素,我想跳过第一个[0]元素,但我怎么做呢?我真的不想写像a[39]=b[40]; a[38]=b[39]...之类的东西

小心行事。用strncpy代替strcpy:

std::strncpy(a, b + 1, 40);

即使b的最后一个字符不是'',或者在索引i的某个地方有'',它也会工作。

如果ab不被视为cstring,而只是缓冲区,可能包含也可能不包含'',则

strncpy特别有用。

在c++中,你也可以使用std::copy作为:

#include <algorithm> //include this!
std::copy(b + 1, b + 41, a); //b + 41 = (b + 1) + 40

我通常更喜欢std::copy,因为它是通用的,可以用于任何可迭代的类型。

您可以使用strcpy()与参数移位:

strcpy(a,b + 1);

这将跳过b的第一个字符。

你可以直接复制源字符串,从第二个字符开始:

char x[ 41 ];
char y[ 40 ];
/* ... */
strcpy( y, x + 1 );

我不明白为什么要使用strcpy而不是memcpy。下面的代码对于SSE2/SSE3处理器是有效的,它将利用SIMD指令。

len=strlen(b)-1;
memcpy(a,b+1,len)

如果长度是已知的

memcpy(a,b+1,40)

如果你操作的是数组

memcpy(a,b+1,sizeof(b)/sizeof(b[0])-1)

如果你想要一个更安全的方法:

#define min(a,b) ((a) < (b)?(a):(b))
......
memcpy(a,b+1,min(sizeof(b)/sizeof(b[0])-1,sizeof(a)/sizeof(a[0])))