как сохранить ничтожную часть широты в 4 символа без знака в c

#c #integer #latitude-longitude #shift #unsigned-char

#c #целое число #широта-долгота #сдвиг #unsigned-char

Вопрос:

у меня есть значение широты в строковом формате, и я хочу сохранить mmmmmm часть широты dd mm.mmmmm в 4 беззнаковых значения символа. а затем хотите выполнить некоторые операции сдвига..

мой код :

 #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) amp; 0xFF;
byt[2] = (min_frac_part >> 16) amp; 0xFF;
byt[1] = (min_frac_part >> 8) amp; 0xFF;
byt[0] = (min_frac_part) amp; 0xFF;

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



   return 0;
}
  

этот ввод [0] неверен.. поэтому я не могу присвоить это значение int 4 значениям без знака char.. также эти значения byt передаются другой функции как беззнаковый символ..

Комментарии:

1. Что означает «этот ввод [0] неверен»?

2. deg = atoi(temp); считывает за пределы, atoi ожидает строку с нулевым завершением, но вы никогда не завершаете ее нулем temp . Вы несколько раз повторяете эту ошибку в коде

Ответ №1:

  1. latitude длина должна быть 12 символов вместо 11, так как strcpy() также в самом конце помещается завершающий нулевой символ, который выходит за пределы массива, когда копируемая строковая константа имеет длину 11 символов.

  2. strncpy() в свою очередь, не добавляет завершающий ноль в конце, если он не входит в число скопированных символов. Это приводит к неопределенному поведению, поскольку в temp[2] , temp[3] и temp[4] может быть что угодно, включая другие числа. temp[2] должно быть '' перед atoi() первым вызовом.

  3. Есть несколько мест, где присутствуют такие ошибки.