Когда я %u
в sprintf()
приложения получает разбился, он прекрасно работает с %d
Формат спецификатор% U используется с Sprintf создает аварии
Смотрите код:
#include <stdio.h>
#include <string.h>
main()
{
unsigned char dAddr[4];
unsigned char sMask[4];
unsigned char nHop[4];
memset(dAddr,0,sizeof(dAddr));
memset(sMask,0,sizeof(sMask));
memset(nHop,0,sizeof(nHop));
unsigned int u4IpDAddr = 0x01020304;
unsigned int u4IpSNetMask = 0xffff01ff;
unsigned int u4NHopGt = 0x01020304;
char *dip = (char *)&u4IpDAddr;
char *smk = (char *)&u4IpSNetMask;
char *nhp = (char *)&u4NHopGt;
sprintf(dAddr, "%u.%u.%u.%u", dip[3], dip[2], dip[1], dip[0]); //if I used %d.%d.%d.%d its working fine
sprintf(sMask, "%u.%u.%u.%u", smk[3], smk[2], smk[1], smk[0]); //if I used %d.%d.%d.%d its working fine
sprintf(nHop, "%u.%u.%u.%u", nhp[3], nhp[2], nhp[1], nhp[0]); //if I used %d.%d.%d.%d its working fine
printf("SAM: func %s line %d IpDAddr %s Mask %s NHop %s\n",__func__,__LINE__,dAddr,sMask,nHop);
}
, когда я объявил указатель с следующий манера его прекрасно работать для %u.%u.%u.%u
формата
unsigned char *dip = (unsigned char *)&u4IpDAddr;
unsigned char *smk = (unsigned char *)&u4IpSNetMask;
unsigned char *nhp = (unsigned char *)&u4NHopGt;
Может ли один объяснить, что я когда я использовал char
указателей?
Это сумасшедший код. Что вы пытаетесь сделать в мире? – ooga
Сурав уже дал единственный реальный ответ.Вы оборачиваете границы своих массивов (в обоих направлениях), и результаты не определены. Однако, в зависимости от ваших данных и подписанности «char» по умолчанию в вашей среде, может быть, что вы перехватываете свои массивы * больше *, когда используете простые указатели «char», в результате переинтерпретации отрицательного числа со знаком ('char' продвигается до' int') как неподписанный. Это может объяснить, почему наблюдаемые (неопределенные) результаты различаются. –
Использование '% u' с' smk' вызовет неопределенное поведение. '% u' предназначен только для печати беззнаковых int (или int с неотрицательными значениями), но некоторые из значений' smk' являются отрицательными символами. –