2016-10-18 5 views
1

위도 값이 문자열 형식이고 mmmmm 부분을 dd mm.mmmmm 위도를 4 부호없는 char 값으로 저장하려고합니다. 그리고 약간 시프트 연산을 수행 할 ..위도의 작은 분수 부분을 C++의 4 unsigned char에 저장하는 방법

내 코드는 :

#include <iostream> 
#include<string.h> 

using namespace std; 

int main() 
{ 
    char latitude[11]="",temp[5]; unsigned char byt[4];int deg,min; 
strcpy(latitude,"1234.99999N"); 
strncpy(temp,latitude,2); 
deg = atoi(temp); 
strcpy(temp,""); 
strncpy(temp,latitude+2,2); 
min = atoi(temp); 
strcpy(temp,""); 
strncpy(temp,latitude+5,5); 
int min_frac_part = atoi(temp); 
cout<<"minfrac : "<<min_frac_part<<"\n"; 
byt[3] = (min_frac_part >> 24) & 0xFF; 
byt[2] = (min_frac_part >> 16) & 0xFF; 
byt[1] = (min_frac_part >> 8) & 0xFF; 
byt[0] = (min_frac_part) & 0xFF; 

unsigned char input[2]; 
input[0] = (byt[1] << 2); 
cout<<"input[0] is : "<<input[0]<<"\n"; 



    return 0; 
} 

이 입력 [0] ... 적절하지 않다 그래서 4 개 부호 char 값이 int 값을 할당 할 수 아니다 strcpy()도 아웃 인 맨 끝에 착신 제로 문자 말하듯 ..도 값은 부호없는 문자와 같은 다른 함수로 전달되어이 BYT ..

+0

"이 입력 [0]이 (가) 적절하지 않음"은 무엇을 의미합니까? –

+2

'deg = atoi (temp);'경계선을 읽으면'atoi'는 null-terminted 문자열을 기대하지만 결코'temp'를 널 종료하지 않습니다. 코드에서이 동일한 오류를 여러 번 수행합니다. –

답변

0
  1. latitude 요구 긴 대신 11의 12 개 문자 될 문자열 상수를 복사 할 때 배열 범위 길이는 11 자입니다.

  2. strncpy()은 차례대로 끝에 복사 된 문자가 아닌 한 끝에 0을 추가하지 않습니다. temp[2], temp[3]temp[4]에 다른 숫자가 포함될 수 있으므로 정의되지 않은 동작이 발생합니다. temp[2]은 처음으로 atoi()이 호출되기 전에 '\0'이어야합니다.

  3. 이러한 오류가있는 곳이 몇 군데 있습니다.