当前位置 : 首页 » 互动问答 » 正文

How to convert string to char array in C++?

分类 : 互动问答 | 发布时间 : 2012-11-09 01:08:26 | 评论 : 10 | 浏览 : 465096 | 喜欢 : 83

I would like to convert string to char array but not char*. I know how to convert string to char* (by using malloc or the way I posted it in my code) - but that's not what I want. I simply want to convert string to char[size] array. Is it possible?

#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;

int main()
{
    // char to string
    char tab[4];
    tab[0] = 'c';
    tab[1] = 'a';
    tab[2] = 't';
    tab[3] = '\0';
    string tmp(tab);
    cout << tmp << "\n";

    // string to char* - but thats not what I want

    char *c = const_cast<char*>(tmp.c_str());
    cout << c << "\n";

    //string to char
    char tab2[1024];
    // ?

    return 0;
}

回答(10)

  • 1楼
  • Simplest way I can think of doing it is:

    string temp = "cat";
    char tab2[1024];
    strcpy(tab2, temp.c_str());
    

    For safety, you might prefer:

    string temp = "cat";
    char tab2[1024];
    strncpy(tab2, temp.c_str(), sizeof(tab2));
    tab2[sizeof(tab2) - 1] = 0;
    

    or could be in this fashion:

    string temp = "cat";
    char * tab2 = new char [temp.length()+1];
    strcpy (tab2, temp.c_str());
    
  • 2楼
  • Ok, i am shocked that no one really gave a good answer, now my turn. There are two cases;

    1. A constant char array is good enough for you so you go with,

      const char *array = tmp.c_str();
      
    2. Or you need to modify the char array so constant is not ok, then just go with this

      char *array = &tmp[0];
      

    Both of them are just assignment operations and most of the time that is just what you need, if you really need a new copy then follow other fellows answers.

  • 3楼
  • Easiest way to do it would be this

    std::string myWord = "myWord";
    char myArray[myWord.size()+1];//as 1 char space for null is also required
    strcpy(myArray, myWord.c_str());
    
  • 4楼
  • str.copy(cstr, str.length()+1); // since C++11
    cstr[str.copy(cstr, str.length())] = '\0';  // before C++11
    cstr[str.copy(cstr, sizeof(cstr)-1)] = '\0';  // before C++11 (safe)
    

    It's a better practice to avoid C in C++, so std::string::copy should be the choice instead of strcpy.

  • 5楼
  • Just copy the string into the array with strcpy.

  • 6楼
  • Try this way it should be work.

    string line="hello world";
    char * data = new char[line.size() + 1];
    copy(line.begin(), line.end(), data);
    data[line.size()] = '\0'; 
    
  • 7楼
  • Try strcpy(), but as Fred said, this is C++, not C

  • 8楼
  • You could use strcpy(), like so:

    strcpy(tab2, tmp.c_str());
    

    Watch out for buffer overflow.

  • 9楼
  • If you don't know the size of the string beforehand and it can vary wildly, you can get a dynamically allocated fixed-size array with the array overload of unique_ptr:

    auto tab2 = std::make_unique<char[]>(temp.size() + 1);
    std::strcpy(tab2.get(), temp.c_str());
    

    Note that you don't need strncpy here as the array is allocated to be sufficiently large in the first place.

  • 10楼
  • Well I know this maybe rather dumb than and simple, but I think it should work:

    string n;
    cin>> n;
    char b[200];
    for (int i = 0; i < sizeof(n); i++)
    {
        b[i] = n[i];
        cout<< b[i]<< " ";
    }
    

相关阅读:

How to split one string into multiple strings separated by at least one space in bash shell?

How to convert string to char array in C++?

How to convert string to char array in C++?

How to convert string to char array in C++?

How do I replace a character at a particular index in JavaScript?

How many spaces will Java String.trim() remove?

String isNullOrEmpty in Java?

Converting a string to a date in JavaScript

How to check whether a string contains a substring in Ruby?

How to lowercase a string in Python?