mans
mans

Reputation: 18168

how to correctly converting char array to string in c++

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

Answers (2)

Ivailo Tanusheff
Ivailo Tanusheff

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

Benjamin Lindley
Benjamin Lindley

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

Related Questions