2016-06-01 5 views
0

sscanf를 호출 할 때 검색하는 문자열에 대한 포인터에 후행 증가분을 사용할 때 scanf는 실제로 증가 된 값에서 작동하지만, 예상했던대로 증분 이전의 값이 아닙니다.포인터가 sscanf에 인수를 전달할 때 올바르게 포인터 작업에 "증가"하지 않습니다.

이 코드 : abyte 지점이 coee은 발에 0xbb 경계, 0xCC 인, 0xdd 및 0x00으로 퍼팅 끝 "aabbccdd"로

for (int i=0;i<=3;++i) 
{ 
    unsigned val; 
    sscanf(abyte+=2,"%2x", &val); 
    eeprom_cache[i] = val; 
} 

. 사후 증가에 대한 나의 이해로, 그것은 aa에서 시작해야합니다.

나는에 코드를 변경하는 경우 : 작동

for (int i=0;i<=3;++i) 
{ 
    unsigned val; 
    sscanf(abyte,"%2x", &val); 
    abyte+=2; 
    eeprom_cache[i] = val; 
} 

합니다.

왜? 게시물 증가의 전체 게시물이 아닌가요?

저는 Windows 10, VS2010, C++에서 실행됩니다.

+6

'+ ='는 사후 증가가 아닙니다. – feersum

+0

'abyte '란 무엇입니까? 'char *'입니까? – user463035818

+0

'+ ='는 왼쪽에있는 것을 모두 추가하는 것을 의미합니다. 사후 증가가 아닙니다. –

답변

1

abyte += 2은 사후 증가가 아니며 즉시 평가되고 할당 된 값을 반환하는 할당 연산자 표현식입니다.

abyte++은 게시물 증가분입니다. 그러나 그것은 하나씩 증가 할 것이므로, 당신이 원하는 것은 아닙니다. 두 번째 버전의 루프가 올바른 방법입니다.

+0

와우, 그건 바보 같았 어. 이것은 우리가 녹슬었을 때 일어나는 일입니다. –