Я хотел бы преобразовать 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;
}
c++
string
type-conversion
Брайан Браун
источник
источник
Ответы:
Самый простой способ сделать это:
В целях безопасности вы можете предпочесть:
или может быть так:
источник
strncpy
заключается в том, что он не будет завершаться нулевым символом, если достигнет размера до того, как найдет нуль в исходной строке. С этим тоже нужно быть осторожным!Хорошо, я шокирован тем, что на самом деле никто не дал хорошего ответа, теперь моя очередь. Есть два случая;
Для вас достаточно постоянного массива символов, поэтому вы можете использовать
Или вам нужно изменить массив символов, чтобы константа не подходила, тогда просто используйте это
Оба они - просто операции присваивания, и в большинстве случаев это именно то, что вам нужно, если вам действительно нужна новая копия, следуйте ответам других товарищей.
источник
std::size(elem)
в C ++ хорошо определен, когдаelem
является a,char array
но он не компилируется, когдаelem
являетсяchar*
илиconst char*
, вы можете увидеть это здесьСамый простой способ сделать это - это
источник
Лучше избегать использования C в C ++, поэтому вместо strcpy следует использовать std :: string :: copy .
источник
Просто скопируйте строку в массив с помощью
strcpy
.источник
Попробуйте, так должно получиться.
источник
Попробуйте strcpy (), но, как сказал Фред, это C ++, а не C
источник
Вы можете использовать
strcpy()
вот так:Остерегайтесь переполнения буфера.
источник
Если вы заранее не знаете размер строки, вы можете динамически выделить массив:
источник
Хорошо, я знаю, что это может быть скорее глупо,
чемпросто, но я думаю, что это должно сработать:источник
n
это не может быть большеb
. Если бы он рухнулn>b
. Лучше использоватьstrcpy
уже предоставленную функцию. Изменить: в некоторых случаях может быть даже лучше использовать,strcpy_s
поскольку он добавляет проверку на указатели NULL (если ваша платформа поддерживает это)Если вы используете C ++ 11 или выше, я бы предложил использовать
std::snprintf
overstd::strcpy
илиstd::strncpy
из-за его безопасности (то есть вы определяете, сколько символов может быть записано в ваш буфер) и потому что он завершает строку за вас нулевым символом (так что вам не о чем беспокоиться). Это было бы так:В C ++ 17 у вас есть альтернатива:
источник