如何在c ++中正确地将char数组转换为字符串

man*_*ans 2 c++ arrays string

我有这两组char数组:

  char t1[]={'1','2','\0','\0'};
  char t2[]={'1','2','3','4'};
Run Code Online (Sandbox Code Playgroud)

我想编写一个函数将它们转换为字符串,但t1的字符串大小应为2,而t2的字符串大小应为4.

 string convert(char * data)
 {
      return string(data);
 }
Run Code Online (Sandbox Code Playgroud)

对t1做得很好,但在t2上崩溃(t2不是空终止).

 string convert(char * data)
 {
      return string(data,data+4);
 }
Run Code Online (Sandbox Code Playgroud)

对于t2做得很好,但是t1的生成字符串的大小是4而不是2.

编写简单快速的函数来正确执行此操作的最佳方法是什么?

Ben*_*ley 6

您可以通过引用获取数组.如果您只对4号数组感兴趣:

std::string convert(char const(&data)[4])
{
   return std::string(data, std::find(data, data + 4, '\0'));
}
Run Code Online (Sandbox Code Playgroud)

如果你想要更通用的东西,你可以把它变成一个模板:

template<size_t N>
std::string convert(char const(&data)[N])
{
   return std::string(data, std::find(data, data + N, '\0'));
}
Run Code Online (Sandbox Code Playgroud)