아래와 같이 sscanf
을 사용하여 메모리 포인터에서 short int
(16 비트/2 바이트)을 스캔하려고합니다. 그러나 그것은 이상한 행동을 보이고 있습니다.sscanf는 c의 메모리 포인터에서 짧은 int를 스캔하는 동안 -1을 반환합니까?
#include <stdio.h>
#include <errno.h>
int main()
{
unsigned char p[] = {0x00, 0x1A};
short int s = 0;
int ret = sscanf(p,"%hu",&s);
printf("Actual data %02x %02x\n",p[0],p[1]);
printf("s = %hu ret = %d errno = %d\n",s,ret,errno);
return 0;
}
출력 :
Actual data 00 1a
s = 0 ret = -1 errno = 0
내가 뭘 잘못 이해하고 도와주세요!
C에서 malloc 및 친구들의 결과를 캐스팅하는 것은 중복되고 잠재적으로 위험 할 수 있습니다 (http://stackoverflow.com/q/605845/253056). –
디버깅 도움말을 찾는 질문 ("이 코드가 작동하지 않는 이유는 무엇입니까?")에는 원하는 동작, 특정 문제 또는 오류 및 질문 자체에서이를 재현하는 데 필요한 가장 짧은 코드가 포함되어야합니다. 분명한 문제 성명이없는 질문은 다른 독자에게 유용하지 않습니다. See : 최소한의 완전하고 검증 가능한 예제를 만드는 방법. – Olaf
'p_extradata'는'0x00' 바이트를 가리키고 있으므로 빈 문자열처럼 보이므로'sscanf'가 해석 할 내용이 없습니다. 어쩌면 단지 그 두 바이트를'short'에 그대로 복사하고 C 문자열을'short'로 변환하지 않으려 고합니다. –