2011-12-21 6 views
0

이 코드는 stdin에서 char*으로 읽습니다. std::string에 직접이 작업을 수행 할 수 있습니까?Stdin에서 문자열 읽기

int size = std::atoi(m_content_size); 
char* buffer; 
buffer = (char*)malloc(size); 
fread(buffer, 1, size, stdin); 

... 

free(buffer); 

은 내가 std::string sBuffer(buffer)을 할 수있는 생각,하지만 난 더 나은 대안이 바라고 있어요.

감사합니다.

+1

이진 데이터 또는 라인 단위 텍스트가있는 경우 "텍스트"가 있다고 생각하지 마십시오. –

+2

이 C 또는 C++를 사용 하시겠습니까? –

+2

@EdHeal : C에'std :: string'이 없기 때문에 C++이되어야합니다 (강한 C 악센트가 있음에도 불구하고). –

답변

2

당신은 아마 문자의 벡터 정도에 읽어야합니다 (이 문자열하지만 단지 원시 이진 데이터가 아니라면, 더 나은 적합 컨테이너) 당신이 cin를 사용할 수 있지만, 너무에 관해서

#include <iostream> 
#include <vector> 

// ... 

std::vector<char> buf(size); 
std::cin.read(buf.data(), buf.size()); 

// all done, will clean up after itself! 
+0

실례합니다. 'std :: cin'과'stdin'은 동등한가요? – Eric

+2

@Eric :'std :: cin'은'stdin' 파일 포인터와 같은 데이터 스트림을 래핑하는 istream입니다. 그들은 같은 것이 아니지만 동일한 데이터에 액세스합니다. Iostream은 표준 C++ I/O 관용구이므로 C++ 응답을 선호합니다. 'std :: fread (buf.data(), 1, buf.size(), stdin)'는 (''을 사용하는) 대응하는'FILE *'코드가 될 것이다. –

+0

통찰력에 감사드립니다. 나는 어떤 이유에서든 항상 cin이 콘솔 입력을지지한다고 생각했습니다. 나는 당신의 해결책을 조금씩 시험 할 것이다. 다시 한번 감사드립니다. – Eric

2
int size = std::atoi(m_content_size); 
std::string buffer(size); 
fread(&buffer[0], 1, size, stdin); 

+0

감사합니다. 이 작업에는 메모리 할당 해제가 필요합니까? – Eric

+1

아니, 평소대로'std :: string'에 의해 자동으로 처리됩니다. –

+0

감사합니다. 나는 거의 이것으로 갔다. 그러나 나는 C 라이브러리 (stdio.h)의 사용을 줄이려고 노력하고있다. 어쨌든 유효한 대답을 +1하십시오. – Eric