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

cnd*_*cnd 0 c++ arrays char

通常我这样做strcpy但是看起来我不能将较大尺寸复制到较小尺寸的阵列.我明白我需要为它跳过一个数组元素,我想跳过第一个[0]元素,但我怎么能这样做呢?我真的不想写类似的东西等a[39]=b[40]; a[38]=b[39]....

Naw*_*waz 11

玩得安全.使用strncpy而不是strcpy:

std::strncpy(a, b + 1, 40);
Run Code Online (Sandbox Code Playgroud)

即使最后一个字符b没有'\0',或者'\0'索引处有某个地方,它也会起作用i.

strncpy如果ab不被视为cstring特别有用,而不是它们只是可能包含或不包含的缓冲区'\0'.

在C++中,您还可以使用std::copyas:

#include <algorithm> //include this!

std::copy(b + 1, b + 41, a); //b + 41 = (b + 1) + 40
Run Code Online (Sandbox Code Playgroud)

我通常更喜欢std::copy,因为它是通用的,可以与任何iteratable类型一起使用.

  • 为strncpy +1 ...安全总是更好:) (3认同)

Mys*_*ial 5

你可以使用strcpy()移动的参数:

strcpy(a,b + 1);
Run Code Online (Sandbox Code Playgroud)

这将跳过第一个字符b.