如何将char[41]转换为char[40]
How to convert char[41] to char[40]
通常我做strcpy
,但这里看起来我无法将较大的数组复制到较小的数组。我知道我需要跳过一个数组元素,我想跳过第一个[0]
元素,但我怎么做呢?我真的不想写像a[39]=b[40]; a[38]=b[39]...
之类的东西
小心行事。用strncpy
代替strcpy
:
std::strncpy(a, b + 1, 40);
即使b
的最后一个字符不是' '
,或者在索引i
的某个地方有' '
,它也会工作。
a
和b
不被视为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])))
相关文章:
- 将无符号char*转换为std::istream*C++
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 将函数参数"const char*"转换为"std::string_view"是
- C ++如何在使用"tolower"时将char转换为int
- 有没有办法在C++的赋值中将"char**"转换为"double"?
- JavaCPP 错误:无法将参数"1"的"char*"转换为"Abc*
- 为什么从 char 转换为 std::byte 可能是未定义的行为?
- 如何在虚幻引擎4中将char*转换为TCHAR?
- C++:将模板类型 char 转换为 std::string
- strcmp/char* 转换无法按预期工作
- C++中的SQLite char*转换
- 无法从 const char* 转换为 const char *&
- 在 C++ 中将 char 转换为 int,而无需符号位传播
- 如果必须包含西里尔字符,如何将 char* 转换为 std::string?
- 试图使用strCMP时的char转换错误
- 无法从'const char *'转换为'LPCTSTR'
- 将 std::vector<char> 转换为字符* 会导致字符缺陷
- 使用 static_cast 将 char 转换为 int c++
- 如何在 C++(MFC) 中将 char* 转换为 LPCTSTR
- 无法将const char转换为字符串构造字符串