我觉得这是一个非常愚蠢的问题,但我似乎无法在任何地方找到答案!
从字符数组中获取一组字符是否可能?举个伪代码的例子:
char arry[20] = "hello world!";
char part[10] = arry[0-4];
printf(part);
输出:
hello
那么,我能否从这样的数组中获取一段字符而不用遍历并逐个获取它们或者将它们转换为字符串以便使用substr()函数?
您可以使用memcpy
(或strncpy
)来获取子字符串:
memcpy(part, arry + 5 /* Offset */, 3 /* Length */);
part[3] = 0; /* Add terminator */
另外需要注意的是你的代码,当使用printf(str)
时,如果str
包含不受信任的输入,可能会导致格式化字符串漏洞。
strncpy()
或者通过C++ std::string
功能来完成。既然你在使用C++,那么最好就直接使用C++中的字符串吧!
附注
恰好对于你的特定应用场景,你可以使用printf()
提供的功能来实现这一点:printf("%.5s\n", arry);
正如Oli所说,您需要使用C++ std::string
功能。在您的示例中:
std::string hello("Hello World!");
std::string part(hello.substr(0, 5)); // note it's <start>, <length>, so not '0-4'
std::cout << part;
嗯,你提到了两种明显的方法。我能想到的唯一办法就是定义自己的子字符串类型来处理字符数组:
struct SubArray
{
SubArray(const char* a, unsigned s, unsigned e)
:arrayOwnedElseWhere_(a),
start_(s),
end_(e)
{}
const char* arrayOwnedElseWhere_;
unsigned start_;
unsigned end_;
void print()
{
printf_s("%.*s\n", end_ - start_ + 1, arrayOwnedElseWhere_ + start_);
}
};