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

37,500

Solution 1

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'));
}

Solution 2

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;
}
Share:
37,500
mans
Author by

mans

Updated on October 16, 2020

Comments

  • mans
    mans over 3 years

    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?

  • Neil Kirk
    Neil Kirk over 9 years
    In the else clause you should reserve the string or use assign function.
  • Neil Kirk
    Neil Kirk over 9 years
    It does but it's inefficient.