2013-02-22 4 views
0

이 질문C++ - 수 std의 char *로 변환하는 방법 :: 목록 <char>

수 std :: 목록을 널 종료 문자의 * 변환 할 수있는 방법이 있다면 난 그냥 궁금 해서요의 초보자 유형입니다. 그것은 std::string은 STL 컨테이너와 호환되는 인터페이스를 가지고 있다는 사실을 이용

#include <list> 
#include <string> 

int main() 
{ 
    char const* data = "Hello world"; 
    std::list<char> l(data, data + strlen(data)); 
} 

:

이 아마 가장 간단한 방법입니다 당신

char* data = ... 
std::list<char> clist = convert_chars2list(data); 
... 
convert_chars2list(char* somedata) 
{ 
    //convert 
} 

답변

2
std::list<char> convert_chars2list(char *somedata) 
{ 
    std::list<char> l; 

    while(*somedata != 0) 
     l.push_back(*somedata++); 

    // If you want to add a terminating NULL character 
    // in your list, uncomment the following statement: 
    // l.push_back(0); 

    return l; 
} 
+0

덕분에 잘 작동 많은 (즉, 그것이 \0로 끝을 의미). –

+0

'l.push_back (* somedata ++);':이 정의되지 않은 동작이 아닙니까? 'operator ++'의 부작용은'operator *'의 인수를 평가하기 전에 순차 화되지 않습니까? 아니면 혼란 스럽습니까? –

+0

@NikBougalis : 나는이 간단한 물건으로도 항상 혼란스러워한다 : 그래서 그것은 * (somedata ++) 또는 ((* somedata) ++)인가? 첫 번째 경우에 나는 UB라고 믿는다. 왜냐하면'++ '의 부작용은'*'의 값 계산에 순차적이지 않기 때문이다. 나는 믿는다 ... –

9

감사드립니다.

+0

광산보다 나은 해결책입니다. –

+0

그게 효과가 있니? 나는 당신이 반복자를 사용해야한다고 생각했을 것이다. – chris

+0

이렇게하면 vs2010에 경고가 표시됩니다. 경고 C4930 : 'std :: list <_Ty> l (std :: string)': 프로토 타입 함수가 호출되지 않았습니다. (변수 정의가 의도 되었습니까?) – Caesar

-1

그것은 당신이 정말 문자를 포함하는 STL을 사용하려는 경우, 당신은 당신이 할 수있는 것이다, std::string을 사용할 수, 문자를 포함하는 표준 : : 목록을 사용하는 것이 정말 이상한 :

char*   data = ....; 
std::string  string(data); 
1
std::list<char> convert_chars2list(char* somedata) 
{ 
    std::list<char> res; 
    while (*somedata) 
    res.push_back(*somedata++); 
    return res; 
} 
+0

감사합니다. –

0
당신의 char* 당신이 할 수있는 것보다 C 스타일의 문자열 인 경우

#include <list> 

int main() 
{ 
    char hello[] = "Hello World!"; 

    std::list<char> helloList; 

    for(int index = 0; hello[index] != 0; ++index) 
    { 
     helloList.push_back(hello[index]); 
    }  
}