Я запустил твой код.Проблема In the output negative values are being showed which are wrong.
может быть решена простым изменением short len=0;
на unsigned short len=0;
и char oct[4]={0},cnt=0,cnt1=0,i,buf[5];
на unsigned char oct[4]={0},cnt=0,cnt1=0,i,buf[5];
.
Тип переменной int без знака может содержать ноль и положительные числа, а int со знаком содержит отрицательные, нулевые и положительные числа.
В 32-разрядных целых числах целое число без знака имеет диапазонОт 0 до 232-1 = от 0 до 4 294 967 295 или около 4 млрд.Подписанная версия идет от -231-1 до 231, то есть от -2,147,483,648 до 2,147,483,647 или от -2 миллиардов до +2 миллиардов.Диапазон такой же, но он сдвинут на числовой линии.
В случае символов, которые составляют всего 1 байт, диапазон беззнакового символа составляет от 0 до 256, а диапазон знакового символа от -127 до 127.
void extractIpAddress(unsigned char *sourceString,short *ipAddress)
функция должна выглядеть примерно так:
void extractIpAddress(unsigned char *sourceString,short *ipAddress)
{
unsigned short len=0;
unsigned char oct[4]={0},cnt=0,cnt1=0,i,buf[5];
len=strlen(sourceString);
for(i=0;i<len;i++)
{
if(sourceString[i]!='.'){
buf[cnt++] =sourceString[i];
}
if(sourceString[i]=='.' || i==len-1){
buf[cnt]='\0';
cnt=0;
oct[cnt1++]=atoi(buf);
}
}
После изменения вышеуказанной переменной на правильный тип программа работает отлично и выдает правильный желаемый результат.