Chciałbym przekonwertować string
na char
tablicę, ale nie char*
. Wiem, jak przekonwertować ciąg na char*
(używając malloc
lub w sposób, w jaki umieściłem go w moim kodzie) - ale nie tego chcę. Chcę po prostu przekonwertować string
na char[size]
tablicę. Czy to możliwe?
#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
Brian Brown
źródło
źródło
Odpowiedzi:
Najprostszy sposób, w jaki mogę to zrobić, to:
Ze względów bezpieczeństwa możesz preferować:
lub może być w ten sposób:
źródło
strncpy
polega na tym, że nie zakończy zerowania, jeśli osiągnie rozmiar przed znalezieniem wartości null w ciągu źródłowym. Z tym też trzeba być ostrożnym!Ok, jestem w szoku, że nikt tak naprawdę nie udzielił dobrej odpowiedzi, teraz moja kolej. Istnieją dwa przypadki;
Tablica stała char jest wystarczająco dobre dla ciebie tak iść z,
Lub musisz zmodyfikować tablicę char, aby stała nie była w porządku, po prostu idź z tym
Obaj są tylko operacje przypisania i przez większość czasu to jest właśnie to, czego potrzebujesz, jeśli naprawdę potrzebujesz nowej kopii, postępuj zgodnie z odpowiedziami innych kolegów.
źródło
std::size(elem)
w C ++ jest dobrze zdefiniowane, kiedyelem
jest a,char array
ale nie kompiluje się, gdyelem
jest achar*
lubconst char*
, możesz to zobaczyć tutajNajłatwiej byłoby to zrobić w ten sposób
źródło
Lepszą praktyką jest unikanie C w C ++, więc zamiast strcpy powinno być std :: string :: copy .
źródło
Po prostu skopiuj ciąg do tablicy za pomocą
strcpy
.źródło
Spróbuj w ten sposób, że powinno działać.
źródło
Spróbuj strcpy (), ale jak powiedział Fred, to jest C ++, a nie C
źródło
Możesz użyć
strcpy()
, na przykład:Uważaj na przepełnienie bufora.
źródło
Jeśli nie znasz wcześniej rozmiaru ciągu, możesz dynamicznie przydzielić tablicę:
źródło
Cóż, wiem, że to może raczej głupie
niżi proste, ale myślę, że powinno działać:źródło
n
to nie może być większe niżb
. Jeślin>b
. Lepiej jest skorzystać zstrcpy
już udostępnionej funkcji. Edycja: W niektórych przypadkach może być jeszcze lepiej,strcpy_s
ponieważ dodaje sprawdzanie wskaźników NULL (jeśli twoja platforma je obsługuje)Jeśli używasz C ++ 11 lub nowszego, sugerowałbym użycie
std::snprintf
overstd::strcpy
lubstd::strncpy
ze względu na jego bezpieczeństwo (tj. Określasz, ile znaków można zapisać w twoim buforze) i ponieważ kończy on ciąg znaków za Ciebie (więc nie musisz się tym martwić). Byłoby tak:W C ++ 17 masz taką alternatywę:
źródło