IT

C ++에서 노드를 문자 배열로 변환하는 방법은 무엇입니까?

lottoking 2020. 9. 11. 08:16
반응형

C ++에서 노드를 문자 배열로 변환하는 방법은 무엇입니까?


배열 로 변환 string하고 char싶지만 char*. 암호화를 char*( malloc내 코드에 게시 한 방식으로 또는 사용) 변환하는 방법을 알고 싶습니다 그게 내가 원하는 것이 아닙니다. 나는 간단하게 변환 할 stringchar[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 *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::snprintfover 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

반응형