我有这两组char数组:
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。
编写一个简单快速的函数来正确执行此操作的最佳方法是什么?
答案 0 :(得分:6)
您可以通过引用获取数组。如果您只对大小为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'));
}
答案 1 :(得分:1)
如果您知道字符数组的长度,我建议您使用以下内容:
#include <string>
#include <iostream>
std::string sconvert(const char *pCh, int arraySize){
std::string str;
if (pCh[arraySize-1] == '\0') str.append(pCh);
else for(int i=0; i<arraySize; i++) str.append(1,pCh[i]);
return str;
}
int main(){
char t1[]={'1','2','\0','\0'};
char t2[]={'1','2','3','4'};
std::string str = sconvert(t1, 4);
std::cout << str << " : " << str.size() << std::endl;
str = sconvert(t2, 4);
std::cout << str << " : " << str.size() << std::endl;
}