C++ 获取字符数组的一部分
我觉得这是一个非常愚蠢的问题,但我似乎在任何地方都找不到答案 是否可以从字符数组中获取一组字符?要抛出一些伪代码:C++ 获取字符数组的一部分,c++,arrays,char,C++,Arrays,Char,我觉得这是一个非常愚蠢的问题,但我似乎在任何地方都找不到答案 是否可以从字符数组中获取一组字符?要抛出一些伪代码: char arry[20] = "hello world!"; char part[10] = arry[0-4]; printf(part); 输出: hello 因此,我可以从这样的数组中获取一段字符,而不必循环并逐字符获取它们,或者转换为字符串,这样我就可以使用substr()。简言之,不行。C样式的“字符串”根本不起作用。您将不得不使用手动循环,或 STRNCYPY()
char arry[20] = "hello world!";
char part[10] = arry[0-4];
printf(part);
输出:
hello
因此,我可以从这样的数组中获取一段字符,而不必循环并逐字符获取它们,或者转换为字符串,这样我就可以使用substr()。简言之,不行。C样式的“字符串”根本不起作用。您将不得不使用手动循环,或<代码> STRNCYPY()/Cux>,或通过C++ >代码> STD::String < /代码>功能。假设你在C++中,你最好做所有的C++字符串!p>
旁注
碰巧,对于您的特定示例应用程序,您可以通过printf()
提供的功能实现这一点:
您可以使用
memcpy
(或strncpy
)获取子字符串:
memcpy(part, arry + 5 /* Offset */, 3 /* Length */);
part[3] = 0; /* Add terminator */
在代码的另一个方面,注意,如果<代码> STR 包含不可信的输入,则执行<代码> PrtTf(STR)可能导致格式字符串漏洞。
< P>正如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;
std::string hello(“hello World!”);
字符串部分(hello.substr(0,5));//请注意,它是,所以不是“0-4”
好吧,你提到了两种明显的方法。我能想到的唯一一件事就是定义自己的子字符串类型来处理字符数组:
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_);
}
};
好吧,那太糟糕了。哦,好吧,我可以转换成字符串,我只是想知道是否有更多。。。优雅的解决方案。我将从char数组中删除一部分以供以后使用,所以仅仅使用printf的能力并不能解决这个问题。不过还是要谢谢你的花边新闻,我不知道这件事,它可能会派上用场@CurLyStudio:下面的MOO果汁的答案使用C++的字符串,如果你问我,它是非常该死的优雅!
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_);
}
};