簡體   English   中英

如何在 C++ 中將字符串轉換為字符數組?

[英]How to convert string to char array in C++?

我想將string轉換為char數組而不是char* 我知道如何將字符串轉換為char* (通過使用malloc或我在代碼中發布它的方式) - 但這不是我想要的。 我只是想將string轉換為char[size]數組。 是否有可能?

#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;
}

我能想到的最簡單的方法是:

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

為了安全起見,您可能更喜歡:

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

或者可以采用這種方式:

string temp = "cat";
char * tab2 = new char [temp.length()+1];
strcpy (tab2, temp.c_str());

好吧,我很震驚,沒有人真正給出好的答案,現在輪到我了。 有兩種情況;

  1. 一個常量字符數組對你來說已經足夠了,所以你可以使用,

     const char *array = tmp.c_str();
  2. 或者你需要修改char 數組所以常量不行,然后就用這個

    char *array = &tmp[0];

它們都只是分配操作,大多數時候這正是您所需要的,如果您確實需要一個新副本,請遵循其他人的答案。

最簡單的方法是這樣

std::string myWord = "myWord";
char myArray[myWord.size()+1];//as 1 char space for null is also required
strcpy(myArray, myWord.c_str());
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)

在 C++ 中避免使用 C 是一種更好的做法,因此應該選擇std::string::copy而不是strcpy

只需使用strcpy將字符串復制到數組中。

試試這種方式它應該是有效的。

string line="hello world";
char * data = new char[line.size() + 1];
copy(line.begin(), line.end(), data);
data[line.size()] = '\0'; 

嘗試 strcpy(),但正如 Fred 所說,這是 C++,而不是 C

您可以使用strcpy() ,如下所示:

strcpy(tab2, tmp.c_str());

注意緩沖區溢出。

如果事先不知道字符串的大小,可以動態分配一個數組:

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

如果您使用的是 C++11 或更高版本,我建議在std::strcpystd::strncpy使用std::snprintf ,因為它的安全性(即,您確定可以將多少個字符寫入緩沖區)並且因為它為您終止了字符串(因此您不必擔心)。 它會是這樣的:

#include <string>
#include <cstdio>

std::string tmp = "cat";
char tab2[1024];
std::snprintf(tab2, sizeof(tab2), "%s", tmp.c_str());

在 C++17 中,你有這個選擇:

#include <string>
#include <cstdio>
#include <iterator>

std::string tmp = "cat";
char tab2[1024];
std::snprintf(tab2, std::size(tab2), "%s", tmp.c_str());

好吧,我知道這可能簡單更愚蠢,但我認為它應該有效:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM