2017-10-21 25 views
-1

구성 파일을 구문 분석하기 위해 stringstream을 사용했습니다. C++ 정수 변수는 텍스트 파일의 값을 할당하는 동안 잘 작동합니다. 그러나 구성 파일의 읽기 값을 C++ int16_t 변수에 할당하면 다른 값이 할당됩니다. 무슨 일이 일어나는지 모르겠다. 다음과 같은구성 파일에서 C++의 int16_t 변수에 변수 할당

void parseConfigurationFile(){ 
    //Variables 
    int16_t int16_tValue; 
    int firstIntegerValue; 

    //File parsing code 
    std::ifstream fin(configFileName); 
    std::string line; 
    std::istringstream sin; 

    while (std::getline(fin, line)) 
    { 
    sin.str(line.substr(line.find(":")+1)); 
    if (line.find("firstIntegerValue") != std::string::npos) { 
     sin >> firstIntegerValue; 
    } 
    else if (line.find("int16_tValue") != std::string::npos) { 
     sin>>int16_tValue; 
    } 
} 

내 구성 파일이 보인다 :

이 내 코드입니다

firstIntegerValue : 12 
int16_tValue : 55555 

가능성이 잘못 무슨 갈 수 있는가? 나는 이것을 이해할 수 없었다.

+0

'istringstream' 인스턴스를 만들기 전에'find '를 사용하여': '를 찾을 것을 제안합니다. –

+0

'else-else' 래더에 마지막 else 절이 없습니다. –

+0

디버거. 디버거를 사용하십시오. 디버거를 사용하면 코드에서 단계별로 변수를 볼 수 있습니다. 프로그램을 디버깅하는 것은 종종 StackOverflow에 올 바르고 누군가가 코드를 검사하거나 코드를 디버깅 할 때까지 기다리는 것보다 빠릅니다. 게시물을 디버깅 세션의 결과로 수정하십시오 (문제의 원인이되는 진술, 예상되는 동작 및 실제 동작을 나타냄). –

답변

1

입력 내용 55555가 int16_t의 범위를 벗어났습니다. int16_t은 부호가있는 수량이므로 부호 용으로 예약 된 비트가 있으므로 긍정적 인 범위가 적습니다. 부호있는 16 비트 정수가 오버 플로우되었습니다.

귀하의 값은 음수로 해석 될 수 있습니다.

더 작은 값을 입력하거나 uint16_t을 사용할 수 있습니다.