직렬 수신된 부동점수 (디코딩 후 오류)
u8 buf[12];
float value;
value = *((float *)(&(buf[1])));
printf("value = %f
",value);
value += 1;
....
이렇게 작성된 프로그램은 출력을 할 수 있지만,value+=1이 끊깁니다.이 문장에서 뒤의 코드는 집행되지 않을 것이다
u8 buf[12];
float value;
value = *((float *)(&(buf[4])));
printf("value = %f
",value);
value += 1;
....
이렇게 작성된 프로그램은 출력을 할 수 있고 뒷 코드도 실행할 수 있으며value+=1에서 카드가 죽었다고 말하지 않는다.이 문장에
원인 분석:
32 연산을 진행할 때 연산에 참여하는 변수 주소는 변수의 유형 길이의 정수 배여야 한다. 첫 번째 상황에서 buf[1]의 주소는 buf의 주소에 1을 더해야 하고 buf[0]의 주소는 짝주소이고 buf[1]의 주소는 기이한 주소이며 2로 정제될 수 있다. 반면에 buf[4]의 주소는 짝주소이고 정제될 수 있다. 그러면 변수의 4칙 연산에 걸리지 않는다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
error: #136: struct ""has no field "AHBSTR"RL-TCPNet을 이식할 때 공식 이더넷 DP83848칩의 구동을 추가하여 컴파일할 때 계속 오류를 보고하였다 error: #136: struct ""has no field "AHBSTR" 사용한 것은 처음에 #...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.