2010-03-19 3 views
0

안녕하세요 아래에있는 내 기능입니다 :C++ 이제 stringstream INT 문자열 만, null 반환

string Employee::get_print(void) { 

    string out_string; 
    stringstream ss; 

    ss << e_id << " " << type << endl; 
    out_string = ss.str(); 

    return out_string; 
} 

e_idtypeint하고 그들이 클래스 직원의 값이 포함되어 있습니다. 그러나 문자열 스트림으로 전달하면 문자열을 지우려고 할 때 문자열을 지 웁니다. 하지만 에 int이 없으면이 출력이 좋습니다. 내가 잘못 = S

를하고있는 중이 야

// 편집

확인; 이 호출 코드 : TMP는 문자열이며, CUR는 직원 개체입니다

tmp = cur->get_print(); 

.

이 코드 ...

stringstream out; 
out << "Test " << e_id << " " << e_type; 
return out.str(); 

Retruns "테스트"와 아무것도

. "Test " <<을 내 보낸 경우 반환되는 문자열은 "

입니다. 차이가있는 경우 Mac OS/X 10.6.2에서 GCC 4.2를 사용하고 있습니다.

+2

나를 위해 잘 작동합니다. 아마도 전화 코드를 보여줄 수 있습니까? – tzaman

+2

최소한 두 줄 (예 : 빈 줄 수를 제외한 40 %)까지 코드를 읽기 쉽게 만들어 줄 수 있습니다. –

+0

"문자열을 지우는 것"은 무엇을 의미합니까? –

답변

0

endl이 필요하지 않다고 생각합니다. std :: cout에있는 파일에 개행 문자를 쓰려면 endl을 써야합니다.

endl을 작성하면 stringstream에 두 번째 줄이 비어있는 문자열이 포함됩니다. 이것은 아마도 당신을 혼란스럽게합니다. 한 줄만 얻으려면 endl을 제거하십시오.

1

이 오류를 재현 할 수 없습니다. 언급 한 바와 같이 endl은 실제로는 \n을 추가하고 쓰기 버퍼를 플러시해야하기 때문에 포함하지 마십시오. 이 용도로는 완전히 불필요하며 실제로 바람직하지 않은 결과를 초래할 수 있습니다 ... 그러나 편집/업데이트의 코드는 저에게 잘 작동합니다.

int main(int argc, char* argv[]) 
{ 
    int e_id = 5; 
    int e_type = 123456; 
    stringstream out; 
    out << "Test " << e_id << " " << e_type; 
    cout << out.str(); 
    return 0; 
} 

는 생산 :

Test 5 123456

내 제안이 그 e_ide_typeint 정말 네이티브 한 번 확인하는 것입니다. 같은 도움이된다면

추가 시험에 대한

, 당신이 볼 수있는 값에 캐스트를 강제 할 수 있습니다 :이 오류를 재현 할 수없는거야

out << "Test " << (int)e_id << " " << (int)e_type;

이후 난 두려워, I 더 이상 도울 수 없어요. 하지만 행운을 빕니다!

1

좋아요. 무슨 일이 벌어지고 있는지 잘 모르겠네요. stringstream 코드의 다른 부분에서이 코드를 사용해 보았는데 정수로 작동하지 않았습니다. 따라서, 나는 sprintf C 함수를 사용하여 복귀 한 :

string Employee::get_print(void) { 

    char out[50]; 

    sprintf(out, "%d %d", e_id, e_type); 

    string output = out; 

    return output; 
} 

이것은 필요한 문자열을 반환합니다.

+0

다시 한번, 변수'output'는 중복됩니다. 또한, 증상을 피함으로써 응용 프로그램의 어딘가에 버그를 숨기는 것이 좋습니다. 초기 코드는 괜찮 았어. 잘못된 결과가 나온다면 이것은 다른 곳의 버그 *가 있음을 의미합니다. 귀하의 변경으로 해당 버그가 수정되지 않았습니다. –

+1

Xcode의 버그 였고 NetBeans에서도 잘 작동합니다. (문자열 스트림 사용) – jumm

1

Netbeans으로 옮겼으며이 문제가 없습니다. 따라서 Xcode의 문제입니다.

0

정확히 동일한 문제가 있습니다. GCC와 stringstream은 아무 것도 반환하지 않습니다.

내가 알기 론, 속임수는 텍스트 데이터를 문자열 스트림에 넣기 전에 앞에 넣어야한다는 것입니다.

이 코드 ...

stringstream ss(stringstream::out); 
ss << 3.14159; 
cout << "'" << ss.str() << "'" << endl; 

는이 결과를 가져옵니다

'' 

을하지만 우리는 먼저 이제 stringstream 안에 단일 "" ...

stringstream ss(stringstream::out); 
ss << "" << 3.14159; 
cout << "'" << ss.str() << "'" << endl; 

를 붙이 경우 예상대로 결과 :

'3.14159'