Вы должны понимать, что argv [1] - это не целое число , как вы хотели бы, но строка заканчивается нулем вместо этого! Строка - это последовательность байтов, заканчивающаяся '\0'
.
Это означает, что при передаче символа 2 через строку cmd в ваше приложение эта строка в памяти будет выглядеть как [2][\0]
, которая состоит только из 2 байтов. Проблема в том, что вы указываете размер в % edx как 4 , что неверно и заставит write()
напечатать еще 2 байта памяти мусор на экран.
Правильный способ сделать то, что вы хотите, это реализовать функцию strlen()
в вашем приложении. Эта функция перебирает поток байтов, считая количество байтов до появления символа \0
. Только тогда вы сможете напечатать правильную строку. Используйте число, возвращаемое strlen()
как % edx , когда вы write()
.