[英]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());
好吧,我很震惊,没有人真正给出好的答案,现在轮到我了。 有两种情况;
一个常量字符数组对你来说已经足够了,所以你可以使用,
const char *array = tmp.c_str();
或者你需要修改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::strcpy
或std::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.