Reputation: 18168
I have these two set of char arrays:
char t1[]={'1','2','\0','\0'};
char t2[]={'1','2','3','4'};
I want to write a function to convert them to string, but the string size for t1 should be 2 and for t2 should be 4.
string convert(char * data)
{
return string(data);
}
Does a good job for t1, but crashes on t2 (t2 is not null terminated).
string convert(char * data)
{
return string(data,data+4);
}
Does a good job for t2, but the size of generate string for t1 is 4 and not 2.
What is the best way to write a simple and fast function to do this correctly?
Upvotes: 2
Views: 38386
Reputation: 81
If you know what is the length of the character array I may suggest you the following:
#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;
}
Upvotes: 1
Reputation: 103703
You can take an array by reference. If you're only interested in arrays of size 4:
std::string convert(char const(&data)[4])
{
return std::string(data, std::find(data, data + 4, '\0'));
}
If you want something more general, you can make it a template:
template<size_t N>
std::string convert(char const(&data)[N])
{
return std::string(data, std::find(data, data + N, '\0'));
}
Upvotes: 6