У меня есть данный код, по-моему, с этим кодом что-то не так: компилирую под XINU.
Важны следующие переменные:
unsigned long ularray[];
int num;
char str[100];
Есть функция, возвращающая int:
int func(int i)
{
return ularray[i];
}
теперь код такой:
num = func(i);
sprintf(str, "number = %lu\n", num);
printf(str);
Проблема в том, что я получаю большие числа при печати с помощью %lu, что неверно.
Если я изменю %lu на %d, я получу правильный номер. Например: с %lu я получаю 27654342, а с %d я получаю 26, последнее верно;
Даны переменные, дано объявление функции, я пишу тело, но оно должно возвращать int;
Мои вопросы:
Я не знаком с 'sprintf', может, проблема в нем?
Я назначил unsigned long для int, а затем распечатал int с помощью %lu, это правильно?
Как я могу решить проблему?
Заранее спасибо.
Спасибо всем за ответ. Я просто хочу отметить, что я работаю под XINU, ну, я изменил порядок компиляции файлов и, что вы знаете... он работает и показывает одинаковые числа на %lu и %d.
Я хорошо знаю, что присвоение «unsigned long» для int и последующая печать с использованием %lu является неправильным кодированием и может привести к потере данных. Но, как я уже сказал, код указан, я не мог изменить переменные и команду печати.
Кстати, у меня не было ошибок или предупреждений. Я понятия не имею, почему изменение порядка компиляции решило проблему, если у кого-то есть идея, которой вы можете поделиться.
Я хочу поблагодарить всех вас, кто пытался мне помочь.
int
? PS"%lu"
является подходящим спецификатором формата дляunsigned long
..."%d"
обрабатывает аргумент какsigned int
, что работает здесь, посколькуnum
равноsigned int
. Вы должны быть осторожны при смешивании такой подписи. - person obataku   schedule 25.08.2012%d
? Тот факт, что вы получаете разные результаты, перемещая код, показывает, что вы делаете что-то неправильно (осознанно тоже - нехорошо). Какую часть кода нельзя изменить? - person Mat   schedule 25.08.2012