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 *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를 피하는 것이 더 나은 방법이므로 strcpy 대신 std :: string :: copy 를 선택해야합니다 .
를 사용하여 문자열을 배열에 복사하십시오 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());
버퍼 오버 플로우에주의하십시오.
문자열의 크기를 미리 모르고 크게 다를 수있는 경우 다음과 같은 배열 오버로드를 사용하여 동적으로 할당 된 고정 크기 배열을 얻을 수 있습니다 unique_ptr
.
auto tab2 = std::make_unique<char[]>(temp.size() + 1);
std::strcpy(tab2.get(), temp.c_str());
strncpy
배열이 처음에 충분히 커지도록 할당되었으므로 여기서는 필요하지 않습니다 .
글쎄, 나는 이것이 다소 멍청 하고 간단 하다는 것을 알고 있지만 작동해야한다고 생각합니다.
string n;
cin>> n;
char b[200];
for (int i = 0; i < sizeof(n); i++)
{
b[i] = n[i];
cout<< b[i]<< " ";
}
C ++ 11 이상을 사용하는 경우 std::snprintf
over std::strcpy
또는 std::strncpy
안전성 때문에 (즉, 버퍼에 쓸 수있는 문자 수를 결정), null로 문자열을 종료하므로 (따라서 그것에 대해 걱정할 필요가 없습니다). 다음과 같습니다.
#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());
참고 URL : https://stackoverflow.com/questions/13294067/how-to-convert-string-to-char-array-in-c
'IT' 카테고리의 다른 글
폴더에서 특정을 가진 파일 찾기 (0) | 2020.09.11 |
---|---|
Python에서 빠른 쉬운 파일 대화? (0) | 2020.09.11 |
암호 해시에 대한 비 랜덤 솔트 (0) | 2020.09.11 |
HTTP 상태 코드 0은 의미가 있습니까? (0) | 2020.09.11 |
서비스에서 UI 프로그램 처리기에 액세스 (0) | 2020.09.11 |