Ваших массив имеет 10 элементов
#define N 10
int V[N] = {10,34, 34, 11};
Однако частично явно инициализирован так, что индексы 0, 1, 2 и 3 содержат 10, 34, 34 и 11 соответственно. Частично явно инициализируется массив в C будет иметь остальные элементы (4 .. 9 включительно) неявно инициализированы 0.
Вы тогда:
sprintf (str, "%d %d ... %d %d", V[0], V[1], V[N-2], V[N-1];
Это не код, который вы на самом деле работает, как это отсутствует )
, а str
не определено. Однако, что бы это было сделано, это записать четыре значения в str
(а не на экран), будучи значениями 0, 1, 8 и 9 (то есть первые 2 и последние 2 значения), то есть символы 0 1 0 0
плюс завершающий NULL
.
Как вы используете sprintf()
не snprintf()
у вас нет способа проверить, будет ли это переполнение str
.
Трудно сказать, что вы делаете из-за форматирования вопроса, но, похоже, вы вызываете функцию array
, которая может или не может изменить массив и распечатать его снова. Тем не менее, ваша функция ассемблера определяются как:
__asm void array (int V[], int N, int V) ....
, который имеет параметр массив/указатель, называемый V
, второй параметр называется N
(хотя основная программа #define
s это до 10 (так что не будет работать), и третий параметр, называемый также V
, который не будет работать, как это имя первого параметра.
у вас также есть таинственное X
определено 10, который затем используется.
это не особенно ясно, что вам спрашивают, и я t было бы лучше, если бы вы разместили небольшой фрагмент рабочего кода, но я надеюсь, что это поможет.
что объяснить о Sprintf: это способ печати, и вы печатаете массив! –
Если у вас есть указатели на массивы, вы также получаете доступ к ним по индексу. –
Paul, yes "% d% d ...% d% d" – jjboy