2013-04-22 4 views
6

Я пытаюсь изменить данные в массиве, это часть моего кода:Scanf символ без знака в шестнадцатеричной

u_char paket[100]; 
//here i put some data into array and then trying to change it by user 
scanf("%hhx.%hhx.%hhx.%hhx.%hhx.%hhx", &paket[0], &paket[1], &paket[2], &paket[3], &paket[4], &paket[5]); 

Когда мой вход, например 88.88.88.88.88.88 он устанавливает paket[0] - paket[5] до 88, но он также изменяет paket[6],paket[7] и paket[8] до 0.

Как это возможно и как его исправить? Мне нужно изменить только [0] - [5]

+0

Декларация вашего 'u_char' массива может инициализировать все элементы, 0. Ответ какого-то сотрудника, который удалил его на минутку, возможно, был прав: вы можете сканировать int aka 4 байта/символов на каждый идентификатор формата в системе Big-Endian. – collapsar

+0

Ах, моя ошибка, я не опубликовал весь код. Между первой и второй строками i загружаются данные в этот массив. Поэтому перед тем, как scanf эти элементы не установлены в 0, проблема связана с scanf. – user2306381

ответ

0

Ваш код прекрасно

u_char paket[100]; 
scanf("%hhx.%hhx.%hhx.%hhx.%hhx.%hhx", &paket[0], &paket[1], &paket[2], &paket[3], &paket[4], &paket[5]) 

Не изменяет значения paket[6], paket[7] and paket[8].

4

Ваш код верен для C99 и более поздних версий. Предположительно, вы используете стандартную библиотеку C, которая не поддерживает модификатор длины hh, который был введен на C99; вероятно, стандартной библиотеки Microsoft C.

Если вам необходимо поддерживать эту старую стандартную библиотеку C, вам придется переписать код, чтобы C89-совместимый, например:

unsigned p[6]; 

if (scanf("%x.%x.%x.%x.%x.%x", &p[0], &p[1], &p[2], &p[3], &p[4], &p[5]) == 6) 
{ 
    int i; 
    for (i = 0; i < 6; i++) 
     paket[i] = p[i]; 
} 
+0

Спасибо большое! btw unsigned p [6]; или unsigned char p [6]; ? или не имеет значения? – user2306381

+0

@ user2306381: Он должен быть 'unsigned p [6];', потому что '% x' требует указателя на' unsigned', * not * указатель на 'unsigned char'. – caf

 Смежные вопросы

  • Нет связанных вопросов^_^