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

标签 c++ arrays string

我有这两组字符数组:

  char t1[]={'1','2','\0','\0'};
  char t2[]={'1','2','3','4'};

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

 string convert(char * data)
 {
      return string(data);
 }

在 t1 上表现不错,但在 t2 上崩溃(t2 不是空终止)。

 string convert(char * data)
 {
      return string(data,data+4);
 }

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

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

最佳答案

您可以通过引用获取数组。如果您只对大小为 4 的数组感兴趣:

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

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

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

关于c++ - 如何在 C++ 中正确地将 char 数组转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26380695/

相关文章:

arrays - 如何从函数返回固定大小的字符串文字数组?

javascript - 双向文本 - 视觉到逻辑

c++ - 'const Name &var' 还是 'const Name& var'?

c++ - 处理删除命令期间出现段错误

php - SQL : Unknown column in 'where clause'

C++:使用for循环允许用户将数字输入数组

c++ - (C++) 在 Windows 中禁用 Alt 命令

c++ - 使用异步 C++ 进行 vector 的并行乘法

c - 使用 Lex 替换文本文件中句号后的第一个字符

c++ - Turbo C++ 的字符串问题